2012-11-09 31 views
0

我正在使用UnitOfWork以及存儲庫模式。該體系結構是帶有LINQ-to-SQL類的MVVM,直接作爲模型。以下代碼片段顯示通用存儲庫,示例(城市存儲庫)和UnitOfWork類。當UnitOfWork保存時引發EntityAddedEvent

通用存儲庫:

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); 
     } 
} 

CityRepository:

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知道,實體添加到數據庫中,現在它可以添加EntityViewModelObservableCollection<EntityViewModel>

回答

1

在你的保存方法,你可以先將添加的元素放入列表中,並在SubmitChanges()後面使用該列表。像(我沒有Visual Sutdio現在,所以它可能無法編譯):

public void Save() 
    { 
     var inserts = _context.GetChangeSet().Inserts.ToList(); 

     _context.SubmitChanges(); 

     foreach(var entityAdded in inserts) 
     { 
      //raise event 
     } 
    } 
+0

是好開始,這是我正在尋找。讓我嘗試! – Marshal

相關問題