2010-05-20 120 views
1

場景:實體框架4,POCO模板和主細節關係。在主細節關係中保留詳細信息EF4 POCO

可以說我有一個主類型是這樣的:

//partial implementation of master entity 
partial class Master 
{ 
    public void AddDetail(x,y,z) 
    { 
     var detail = new Detail() 
     { 
      X = x, 
      Y = y, 
      Z = z, 
     }; 

     //add the detail to the master 
     this.Details.Add(detail); 
    } 
} 

如果我再主實例添加到我的上下文並提交,具體細節將不會被保存:

var masterObject = new Master(); 
masterObject.AddDetail(1,2,3); 
myContext.MasterSet.AddObject(masterObject); 

有在使用POCO模板時,有什麼方法可以使細節保持不變? 或者其他方式? Master實體中的Details集合是FixUpCollection,因此它應該跟蹤IMO的更改。

那麼,任何想法如何使這項工作W/O殺死POCO'ness太多?

回答

0

我找到了解決方案。

我只需要通過SaveOptions.DetectChangesBeforeSave像這樣:

context.SaveChanges(SaveOptions.DetectChangesBeforeSave); 

這使我細節對象添加到主對象的w/o每個單獨的細節附加到上下文。

-1

可能

添加一個構造函數,以您的實體,它接受一個上下文,通過引用在私有字段保存。然後,您的AddDetail函數可以檢查專用_context字段,並且如果它引用了實例化的上下文,則在保存主記錄後,將細節添加到上下文中。

但是...

這可能不是最好的模式,因爲它違反了單一職責原則。我認爲使用Repository模式會更好,並讓Repository提交未保存的Details。 Here是一個關於在實體框架4中實施存儲庫模式的好文章。

+0

第一個建議很糟糕地違反了POCO。 而第二個建議並不能解決更改細節的問題。 存儲庫應該存儲聚合根,你不應該有一個聚合中的子對象。 因此,在存儲庫中解決這個問題需要檢查一個細節是新的還是已經存在的等等。 – 2010-05-20 19:22:51