我很感激任何建议。
我一直在寻找修改集合的正确方法,但不确定哪个是最好的。
我有一个嵌套集合的实体:
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.
另外,好吧,我可以删除整个集合并重新添加它,但它会影响性能。
所以,我非常感谢你的建议。
答案 0 :(得分:3)
您可以遍历地址并检查id
。根据该值,可以将实体条目的状态设置为Added
或Modified
。在这种情况下,您不必重新创建集合。
foreach (var a in customer.Addresses)
{
model.Entry(a).State = a.ID == 0 ? EntityState.Added :EntityState.Modified;
}
当然,您可以为客户使用相同的方法。