我有一个多选表单需要保存到数据库中。用户可以在随后的访问中编辑他们的选择。这些项目在具有唯一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);
}
}
正如你可以看到有多个循环和多个该列表上的来电,这使我不知道是否有在做这一个更清洁的方式?
这是一个样板,但是一个高度可重用的辅助功能的常设候选人。我还会删除重复两次的查询,一次要计数,一次要搜索。 –