【问题标题】:Entity Framework 4 POCO CRUD Repository - How to perform Smart INSERT/UPDATE?Entity Framework 4 POCO CRUD Repository - 如何执行智能插入/更新?
【发布时间】:2010-09-27 07:11:18
【问题描述】:

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

如果我有一个实体框架 4 存储库,它公开以下接口:

void InsertOrUpdate(Foo foo);

我的 EDM 是使用自定义 POCO 完成的(不生成代码),我如何对 POCO 执行 UPDATE?

我可以通过这样做插入一个新对象:

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,如果存在 - 我该怎么办?

【问题讨论】:

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


    【解决方案1】:

    所以我需要在 DataContext 上进行 SaveChanges,而不是在进行 Update 时使用 AddObject。

    我已经通过我的 DataContext 接口公开了一个名为 Commit 的方法,该方法执行 SaveChanges。

    我将 InsertOrUpdate 方法重命名为 Add

    现在,插入一个新实体:

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

    更新现有实体:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多