我正在使用 UnitOfWork 和存储库模式。该架构是 MVVM,将 LINQ-to-SQL 类直接作为模型。以下代码片段显示了 Generic Repository、A Sample(City Repository) 和 UnitOfWork 类。
通用存储库:
public abstract class Repository<T> : IRepository<T> where T : class
{
protected Table<T> _objectSet;
#region Constructor
public Repository(DataContext context)
{
_objectSet = context.GetTable<T>();
}
#endregion
public virtual void Add(T entity)
{
_objectSet.InsertOnSubmit(entity);
}
}
城市仓库:
public class CityRepository: Repository<City>
{
public CityRepository(DataContext context): base(context)
{
public override void Add(City entity)
{
//Can't publish event here, because Changes
//aren't still submitted to Database
base.Add(entity);
//CityAddedEventArgs e = new CityAddedEventArgs(entity);
//if (this.CityAdded != null)
//this.CityAdded(this, e);
}
}
}
工作单元
public class UnitOfWork : IUnitOfWork
{
private readonly DataContext _context;
public UnitOfWork(DataContext context)
{
_context = context;
}
#region IUnitOfWork Members
public AddressRepository Addresses
{
get
{
if (_addresses == null)
{
_addresses = new AddressRepository(_context);
}
return _addresses;
}
}
public CityRepository Cities
{
get
{
if (_cities == null)
{
_cities = new CityRepository(_context);
}
return _cities;
}
}
public void Save()
{
_context.SubmitChanges();
//Need to Raise event here if an entity is added,
//but don't know which entity is added !
}
}
现在。我想在将实体添加到数据库时发布一个事件,即在 UnitOfWork.Save() 方法上。例如,如果将 AddressEntity 添加到数据库中,则必须触发 AddressAdded 事件,如果将 CityEntity 添加到数据库中,则必须触发 CityAdded 事件。但是,在 SubmitChanges 之后我怎么知道将哪个实体添加到数据库中?
发布事件的唯一目的是让ViewModel
知道一个实体被添加到数据库中,现在它可以添加EntityViewModel
到它的ObservableCollection<EntityViewModel>