如果有任何建议,我将不胜感激。
我一直在寻找修改集合的正确方法,但不确定哪一个是最好的。
我有一个带有嵌套集合的实体:
public class Customer
{
//customer properties
ICollection <Address> Addresses{get; set;}
}
我的 Customer
的 Edit
View 还包括 Addresses
,即用户动态添加地址,并将整个集合传递给 Controller 关于表单提交。
在 Controller 中,我照常更新 Customer
:
Context.Entry(customer).State = EntityState.Modified;
而且我还必须更新地址
的集合:
customer.Addresses.ToList()
.ForEach(p =>
Context.Entry(p).State = EntityState.Modified);
它工作正常,直到我将新记录添加到地址
。由于它不存在于数据库中,因此保存会引发错误。
我知道我可以检查数据库中是否存在该条目 - 修改,否则 - 添加。
但是 Address
实体存在问题。它的主键,例如ID
,是身份,即插入到数据库时自动递增。
因此,最初在集合中新的Address
的ID
等于0
。然后,如果我将一个 Address
添加到上下文,那么在添加另一个 Address
之前,我检查第二个 Address
是否在上下文中,它将返回 true,因为第一个是还具有 ID
= 0。
另外,好吧,我可以删除整个集合并再次添加它,但这会影响性能。
所以,我非常感谢您的建议。
最佳答案
您可以迭代地址并检查id
。根据该值,可以将实体条目的状态设置为“已添加”或“已修改”。在这种情况下,您不必重新创建集合。
foreach (var a in customer.Addresses)
{
model.Entry(a).State = a.ID == 0 ? EntityState.Added :EntityState.Modified;
}
当然,您可以对客户使用相同的方法。
关于asp.net - 使用嵌套集合更新模型,ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28876963/