簡體   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