这可能是一个简单的解决方案,但......
如果我有一个Entity Framework 4 Repository,它公开了以下接口:
void InsertOrUpdate(Foo foo);
我的EDM是使用自定义POCO(无代码生成)完成的,我如何对POCO执行UPDATE?
我可以通过这样做 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或UPDATE吗?
我们如何处理EF4 POCO Repos中的插入和更新?我是否必须首先查询数据库以查看它是否存在,如果不存在则执行AddObject,如果是 - 我该怎么办?
答案 0 :(得分: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();