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