使用嵌套集合ASP.NET MVC更新模型

时间:2015-03-05 11:35:34

标签: asp.net sql-server asp.net-mvc entity-framework ado.net

我很感激任何建议。

我一直在寻找修改集合的正确方法,但不确定哪个是最好的。

我有一个嵌套集合的实体:

public class Customer
{
    //customer properties
    ICollection <Address> Addresses{get; set;}
}

Edit的{​​{1}}视图也包括Customer,即用户动态添加地址,整个集合在表单提交时传递给控制器​​。 在控制器中,我通常更新Addresses

Customer

而且我还要更新Context.Entry(customer).State = EntityState.Modified;

的集合
Address

它工作正常,直到我向customer.Addresses.ToList() .ForEach(p => Context.Entry(p).State = EntityState.Modified); 添加新记录。由于它在DB中不存在,因此保存会引发错误。

我知道我可以检查数据库中是否存在条目 - 修改,否则 - 添加。

Addresses实体存在问题。它的主键,比如Address,是Identity,即插入到DB时的自动增量。

因此,最初在新的ID集合中,Address等于ID。然后,如果我在上下文中添加一个0,那么在添加另一个Address之前,我会检查第二个Address是否在上下文中,它将返回true,因为第一个也是{{1} } = 0.

另外,好吧,我可以删除整个集合并重新添加它,但它会影响性能。

所以,我非常感谢你的建议。

1 个答案:

答案 0 :(得分:3)

您可以遍历地址并检查id。根据该值,可以将实体条目的状态设置为AddedModified。在这种情况下,您不必重新创建集合。

    foreach (var a in customer.Addresses)
    {
              model.Entry(a).State = a.ID == 0 ? EntityState.Added :EntityState.Modified;
    }

当然,您可以为客户使用相同的方法。