[英]Linq 'Adding new' and 'Deleting old' objects with entity framework
我一直试图解决一个问题,似乎找不到任何有效的东西......
在我的MVC应用程序中,我收到一个地址对象,其中包含与之关联的逗号分隔的名称字符串。 例如:
public class address
{
public string Names { get; set; } //-- "Name-One,Name-Two,Name-Three"
}
在我的服务层中,我将此列表拆分为字符串数组。
现在使用实体框架我需要预先形成三个任务
1)创建要存储在数据库中的新Name对象,并将它们添加到地址中。
2)从数据库中删除旧名称对象,并从地址中删除它们。
3)提交更改,以便将地址对象链接到新的多个名称对象列表。
有没有人有任何想法如何没有达到数据库。 (避免每个循环无穷无尽)
提前致谢
松鸦
string[] newNames = ServiceLayerSplitCommaSeparatedIntoArray(addressObj);
var entity = dbContext.Set<Address>().Find(addressId);
entity.Names.Clear();
foreach (var newName in newNames)
entity.Names.Add(new AddressName {
Value = newName,
});
dbContext.SaveChanges();
我认为最有效的方法是将任务完成为2,然后是1,然后是3。
entity.Names.Clear()
行将从地址中删除所有旧的Name对象。 只要这些实体具有地址实体所需的外键,它们也将从数据库中删除。 否则,如果它们具有可选的外键,则可以执行此操作以将其从数据库中删除(而不是在Names
集合上Clear
):
var oldNames = entity.Names.ToArray();
foreach (var oldName in oldNames)
dbContext.Set<AddressName>().Remove(oldName);
//entity.Names.Clear(); // Remove calls above will clear these automatically
然后,您可以遍历字符串数组并将新实体添加到集合中。
最后,保存更改。 所有内容都将被删除并添加到单个数据库往返中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.