更新数据库以匹配数组(多对多)

时间:2014-08-14 20:52:51

标签: sql-server linq entity-framework asp.net-web-api

我有3个表,让我们称它们为Table1,Table2和ManyMany表。

Table 1: 
ID1 [PK],
Description1

Table 2: 
ID2 [PK],
Description2

ManyMany:
ID1 [PK, FK],
ID2 [PK, FK]

我有2个阵列:

它们都使用Table1中的PK(ID1 == 3)并包含ID2值。

Array1 [5,6,8]     // from DB 
Array2 [5,6,9]     // from front-end 

我想要做的是比较2个数组并更新ManyMany以匹配Array2。所以在这种情况下记录'ID1 == 3&&必须删除ID2 == 8'并记录'ID1 == 3&&必须添加ID2 == 9'。但这会改变。可以是多个删除和插入等。

如何更新数据库以匹配array2?
有没有简单的方法来实现这一目标? 删除与ID1匹配的所有记录并再次插入它们将是非常低效的。

我正在使用带有LINQ和EntityFramework的ASP.NET Web API。

1 个答案:

答案 0 :(得分:0)

我使用Linq的Except()扩展程序解决了这个问题:

var toRemove = array1.Except(array2)
foreach(var item in toRemove) {
    array1.Remove(item);
}
var toAdd = array2.Except(array1)
foreach(var item in toAdd) {
    array1.Add(item);
}

//Do whatever you need to persist to the DB...