Теперь собственно код:
///
/// Класс-контейнер UnitOfWork
///
public sealed class UnitOfWork
{
private List_items;
///
/// Конструктор
///
public UnitOfWork() {
log = new CLog();
_items = new List();
}
///
/// Добавляем новый объект в контейнер и помечаем его как новый
///
public void New(DomainObject obj)
{
foreach (DomainObject sobj in _items
.Where(f => f.objectState == ObjectState.NewObject))
{
if (sobj.GUID == obj.GUID)
{
log.Add("Объект уже зарегестрирован как новый => " + obj.GetType().Name.ToString());
return;
}
else
{
obj.objectState = ObjectState.NewObject;
_items.Add(obj);
return;
}
}
obj.objectState = ObjectState.NewObject;
_items.Add(obj);
}
///
/// Добавляем новый объект в контейнер и помечаем его как измененный
///
public void Dirty(DomainObject obj)
{
foreach (DomainObject sobj in _items
.Where(f => f.objectState == ObjectState.DirtyObject))
{
if (sobj.GUID == obj.GUID)
{
log.Add("Объект уже зарегестрирован как измененный => " + obj.GetType().Name.ToString());
return;
}
else
{
obj.objectState = ObjectState.DirtyObject;
_items.Add(obj);
return;
}
}
obj.objectState = ObjectState.DirtyObject;
_items.Add(obj);
}
///
/// Добавляем новый объект в контейнер и помечаем его как удаленный
///
public void Removed(DomainObject obj)
{
foreach (DomainObject sobj in _items.Where(f => f.objectState == ObjectState.DeletedObject))
{
if (sobj.GUID == obj.GUID)
{
log.Add("Объект уже зарегестрирован как удаленный => " + obj.GetType().Name.ToString() + " [" + obj.UID.ToString() + "]");
string o = "Obj => " + obj.GUID.ToString();
string o1 = "Sobj => " + sobj.GUID.ToString();
log.Add(o);
log.Add(o1);
}
else
{
obj.objectState = ObjectState.DeletedObject;
_items.Add(obj);
return;
}
}
//если IM пустая
if (_items.Count == 0)
{
obj.objectState = ObjectState.DeletedObject;
_items.Add(obj);
}
}
public void Clear()
{
_items.Clear();
}
public IListGet()
{
return _items;
}
}