我正在嘗試在名爲AddOrUpdate的EF 4 POCO存儲庫上創建一個方法。EF 4,POCO和AddOrUpdate
這個想法是,業務層可以傳入一個POCO對象,並且持久性框架將添加該對象,如果它是新的(尚未在數據庫中),否則將更新數據庫(一旦調用SaveChanges()),與新的價值。這與我詢問EF有關的其他問題類似,但在理解這一點時我只有大約80%,所以請原諒部分重複。
我缺少的部分是如何確定業務對象確實已經存在於數據庫中,並且現在已經加載,如何在傳入的業務對象的ObjectContext /關聯ObjectSet中更新對象圖感謝TryGetObjectByKey)。 ApplyCurrentValues聽起來有點像我想要的,但它只複製標量值,似乎並不打算更新ObjectContext/ObjectSet中的對象圖。由於我的特殊用例,我現在不關心併發性。
public void AddOrUpdate(BO biz)
{
object obj;
EntityKey ek = Ctx.CreateEntityKey(mySetName, biz);
bool found = Ctx.TryGetObjectByKey(ek, out obj);
if (found)
{
// How do I do what this method name implies? Biz is a parent with children.
mySet.TellTheSetToUpdateThisObject(biz);
}
else
{
mySet.AddObject(biz);
}
Ctx.DetectChanges();
}
@Craig:因此,如果我通過EF 4加載了一個POCO父項(有可能是孫子等),修改一些子對象(修改現有子對象,添加新對象,刪除一些對象),我必須手動更新ObjectContext中的對象圖? – 2010-06-08 17:52:02
否。如果從上下文加載並且實體執行某種形式的更改跟蹤,則這是自動的。只有當你從一個斷開的實體複製你自己的時候。 – 2010-06-08 18:12:56
@Craig:我最初是從上下文加載的,但發現我的更改沒有應用到SaveChanges()的調用中。 POCO對象需要做什麼更改跟蹤?如果它必須實施更改跟蹤機制,它是否仍然是一個POCO對象? – 2010-06-08 18:59:38