【发布时间】:2015-05-06 18:28:39
【问题描述】:
如果有任何建议,我将不胜感激。
我一直在寻找修改集合的正确方法,但不确定哪种方法最好。
我有一个带有嵌套集合的实体:
public class Customer
{
//customer properties
ICollection <Address> Addresses{get; set;}
}
Customer 的 Edit 视图也包括 Addresses,即用户动态添加地址,并且整个集合在表单提交时传递给控制器。
在控制器中,我照常更新Customer:
Context.Entry(customer).State = EntityState.Modified;
我还要更新Address的集合:
customer.Addresses.ToList()
.ForEach(p =>
Context.Entry(p).State = EntityState.Modified);
在我向Addresses 添加一条新记录之前,它工作正常。由于它在数据库中不存在,因此保存会引发错误。
我知道我可以检查数据库中是否存在该条目 - 修改,否则 - 添加。
但Address 实体存在问题。它的主键,比如ID,是身份,即插入数据库时自动递增。
因此,最初在集合中新的Address 将有ID 等于0。然后如果我在上下文中添加一个Address,然后在添加另一个之前,我检查第二个Address是否在上下文中,它将返回true,因为第一个也是ID = 0。
另外,好的,我可以删除整个集合并重新添加它,但这会影响性能。
所以,非常感谢您的建议。
【问题讨论】:
标签: asp.net sql-server asp.net-mvc entity-framework ado.net