【问题标题】:Entity Framework : updating one-many relationships for an entity's child collection实体框架:更新实体子集合的一对多关系
【发布时间】:2011-03-06 10:32:52
【问题描述】:

考虑一个处理房屋和图片的应用程序。名为House 的实体与HousePicture 具有1:n 关系。

该应用程序允许用户创建和编辑House,以及添加/删除HousePictures

[HttpPost]
public ActionMethod Edit(House h)
{
   //get an attached entity from the DB first.
   House original = db.Houses.SingleOrDefault(x=>x.ID==h.ID);

   UpdateModel(original);

   //collect all the uploaded pictures.
   original.HousePictures = GatherPicturesFromForm();


   db.SaveChanges();
   // the changes for the House are saved, 
   //but child collection Pictures are not.
}

从头开始重新创建子集合时,您如何更新 - 添加和删除 - 子集合?

  • Add()Attach() 用于集合中的每个孩子?
  • 您需要按什么顺序添加或附加父实体与子集合?
  • 如何检测要删除的孩子?这是 EF4 的一项功能,删除由框架自动发生,还是开发人员需要编写此逻辑?
  • 当添加多个 HousePicture 时,其 ID == 0。具有 SQL Server 主键的实体具有自动分配的 PK int IDENTITY(1,1)。这成为一个问题,因为 EF4 认为 2+ 孩子具有相同的 ID。

  • 您对使用 Entity Framework 4 保存子集合有什么建议?

  • 关于在更新/添加/删除时使 1:n 集合的持久性更容易的任何其他建议?

【问题讨论】:

  • 你是如何解决这个问题的?将 EntityCollection 保存回数据库?

标签: asp.net-mvc entity-framework entity-framework-4


【解决方案1】:

在 EF 中,只需将新对象添加到集合中,它们就会使用正确的外键值自动保存到数据库中。

original.HousePictures.AddRange(GatherPicturesFromForm());

【讨论】:

  • 谢谢...这是否包括当数据库中的子对象不存在于“新”集中时的删除?
  • 如果 OI 外键需要子对象上的这种关系,人们会认为尤其如此。
  • 很遗憾EntityCollection<T> 没有AddRange()
猜你喜欢
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2017-06-27
  • 2016-07-01
  • 1970-01-01
相关资源
最近更新 更多