【发布时间】:2014-02-12 17:04:27
【问题描述】:
当实体的子集合处于分离状态时,如何更新它们?我在Groups 和Users 之间有一个多对多的关系。当用户编辑一个组时,在回发时,我会得到一个用户 ID 列表,可以在组中添加或删除。问题是当viewModel.Group 被分离时,对子集合的更改不会在重新附加和保存实体时得到反映。这是代码...
if (ModelState.IsValid)
{
if (viewModel.SelectedUserIDs != null)
{
foreach (var id in viewModel.SelectedUserIDs)
{
var user = _userRepo.GetUser(id);
viewModel.Group.Users.Add(user);
}
}
_groupRepo.SaveGroup(viewModel.Group);
}
保存组方法
if (group.GroupID <= 0)
{
Context.Groups.Add(group);
}
else if (Context.Entry(group).State == System.Data.Entity.EntityState.Detached)
{
Context.Groups.Attach(group);
Context.Entry(group).State = System.Data.Entity.EntityState.Modified;
}
Context.SaveChangesAsync();
我尝试过的两件事是立即重新附加实体并进行更改
if (ModelState.IsValid)
{
_groupRepo.Attach(viewModel.Group);
if (viewModel.SelectedUserIDs != null)
{
...
但同样的问题也会发生。保存实体后,子集合将恢复到其原始状态。
我发现的唯一解决方法是获取一个新实体并修改新实体的集合,这将按预期保留更改,但使用这种方式会迫使我将属性更改从 viewModel.Group 复制到 freshGroup
if (ModelState.IsValid)
{
var freshGroup = _groupRepo.GetGroup(viewModel.Group.GroupID);
if (viewModel.SelectedUserIDs != null)
{
//make child collection changes to 'freshGroup'
//copy properties from 'viewModel.Group' to 'freshGroup'
...
【问题讨论】:
标签: c# entity-framework asp.net-mvc-5 entity-framework-6