在实体框架4.3中更新对象的列表属性 - 代码优先,N层

时间:2012-05-28 13:37:57

标签: c# entity-framework

在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和Name而言,这很有效,但会忽略Bars属性。

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

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

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

1 个答案:

答案 0 :(得分:2)

  

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

如果你自己写下坚持,你应该怎么知道变化呢?我想你会选择以下两个选项之一:

  • 您将查询数据库中的当前状态,并将其与收到的状态进行比较以查找已更改的内容
  • 您可以在课程中添加一些辅助字段,让客户告诉您已更改的内容

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

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