2010-09-27 52 views
1

這可能是一個簡單的解決方案,但是....實體框架4 POCO CRUD存儲庫 - 如何執行智能插入/更新?

如果我有一個實體框架4 Repository中的公開以下接口:

void InsertOrUpdate(Foo foo); 

我的EDM與定製POCO的完成(無碼代),我如何執行POCO的更新?

我可以INSERT一個新對象通過這樣做:

var newFoo = new Foo { ... }; 
repo.InsertOrUpdate(newFoo); 

,如果我實現與ObjectContext.AddObject該方法的工作原理。

但如果我嘗試和UPDATE對象:

var existingFoo = repo.Find(foo); 
existingFoo.Name = "Changed the foo!"; 
repo.InsertOrUpdate(existingFoo); 

我得到一個錯誤說使用相同的密鑰已經存在,這是有道理的實體 - 但我雖然ObjectContext.AddObject方法足夠聰明地做INSERT或更新?

我們如何處理EF4 POCO Repos中的插入和更新?我是否必須首先對數據庫進行查詢以查看它是否存在,如果不是,那麼執行AddObject,如果是 - 我該怎麼辦?

回答

1

因此,我需要在DataContext上執行SaveChanges,而不是在執行Update時執行AddObject。

我已經有一個方法叫做提交通過我的DataContext接口公開,它做了一個SaveChanges。

我改名爲InsertOrUpdate方法添加

所以現在,插入一個新的實體:

var newFoo = new Foo { ... }; 
repo.Add(newFoo); 

更新現有的實體:

var existingFoo = repo.Find(foo); 
existingFoo.Name = "Changed the foo!"; 
myCtx.Commit();