1

在 n 层场景中,数据层应该如何更新 EF 4.3 中对象的 List 属性?

假设我们有这个类:

public class Foo
{
  public int Id { get; set; }
  public string Name { get; set; }
  public List<Bar> Bars { get; set; }
}

就保存/更新 ID 和名称而言,这很有效,但 Bars 属性被忽略。

protected void SaveChanges(Foo foo)
{
  this.Database.Entry<Foo>(foo).State = GetState(foo);
  this.Database.SaveChanges();
}

由于原始上下文(检索到的 Foo)不再在内存中,数据层应该如何处理保存对 Bars 属性的更新?EF 如何知道哪些 Bar 项目已被删除、哪些已更新、哪些已添加?

注意:我可以遍历每个 Bar 项目并将其与原始项目进行比较,但我猜 EF 不应该以这种方式工作。这似乎乏味且不正确。

4

1 回答 1

2

EF 如何知道哪些 Bar 项目已被删除、哪些已更新、哪些已添加?

如果您自己编写持久性,它应该如何知道更改?我想你会选择以下两个选项之一:

  • 您将查询数据库的当前状态并将其与接收到的状态进行比较以找出发生了什么变化
  • 你会在你的类中添加一些辅助字段,让客户告诉你发生了什么变化

在这两种情况下,您都将使用有关更改的信息来生成正确的 SQL。

EF 只解决了最后一点(SQL 生成),但您仍然有责任告诉它发生了什么变化。

于 2012-05-28T14:07:48.317 回答