实体框架4 POCO CRUD存储库 - 如何执行智能INSERT / UPDATE?

时间:2010-09-27 07:11:18

标签: .net entity-framework-4 poco crud repository

这可能是一个简单的解决方案,但......

如果我有一个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,如果是 - 我该怎么办?

1 个答案:

答案 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();