繁体   English   中英

Linq使用实体框架“添加新”和“删除旧”对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM