我有一個多選表單需要保存到數據庫中。用戶可以在隨後的訪問中編輯他們的選擇。這些項目在具有唯一ID的表中定義,因此表單僅傳回一個ID列表。在實體框架中比較和插入/更新/刪除子項
它是這樣的:
Fruits:
{ id=1, name="apple" }
{ id=2, name="orange" }
{ id=3, name="banana" }
People:
{ id=1, name="user", fruits=apple,orange }
在DB有一個鏈接表連接的人民和水果的ID標識。
現在,當我收到編輯請求時,我需要與現有水果進行比較,以瞭解是否需要添加或刪除條目。
foreach (var fruit in existing_fruits)
{
if (post_fruits.Where(e => e.id == fruit.id).Count() == 0) user.Fruits.Remove(fruit);
}
foreach (var fruit in post_fruits)
{
if (existing_fruits.Where(e => e.id == fruit.id).Count() == 0)
{
var entity = context.Fruit.Where(e => e.id == fruit.id);
user.Fruits.Add(entity);
}
}
正如你可以看到有多個循環和多個該列表上的來電,這使我不知道是否有在做這一個更清潔的方式?
這是一個樣板,但是一個高度可重用的輔助功能的常設候選人。我還會刪除重複兩次的查詢,一次要計數,一次要搜索。 –