实体框架:为实体的子集合更新一对多关系

时间:2010-06-21 17:24:18

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

考虑一个处理房屋和图片的应用程序。名为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集合的持久性更容易的任何其他建议吗?

1 个答案:

答案 0 :(得分:0)

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

original.HousePictures.AddRange(GatherPicturesFromForm());