【问题标题】:Entity Framework Remove or Add to Match List实体框架删除或添加到匹配列表
【发布时间】:2017-08-16 04:21:31
【问题描述】:

我有一张这样的桌子:

库存表

  • InventoryID(主键)
  • PersonID(外键)
  • CarID(外键)

所以在前端显示了一个汽车列表,用户使用一个复选框来选择他们库存中的汽车。

如果他们取消选择车辆并重新选择它,它将不再具有 InventoryID。

最后,我将得到一个包含正确字段名称的列表,但我需要数据库行来匹配该列表,方法是从数据库中删除不在该列表中的车辆并添加列表中的新车辆,并且我需要通过 PersonID + CarID 组合进行检查,因为 InventoryID 可能因取消选择和重新选择车辆而丢失。

我能想到的唯一方法是:

  • 拉出库存表并循环遍历它
  • 检查每辆车是否在列表中
  • 删除、插入或什么都不做

不过,这样做的缺点是每次删除/插入都将是在查询之上的一个新查询,以获取列表本身。我想知道实体框架中是否有办法执行匹配列表或集合之类的操作。

【问题讨论】:

  • 添加你使用的代码
  • 我还没有使用任何代码,我正在尝试先看看Entity Framework中是否已经内置了一些东西。
  • If they unselect a vehicle and reselect it, it will no longer have the InventoryID 什么意思?
  • 当他们第一次从数据库加载时,它将有一个 InventoryID,但如果他们选中一个框,那么该关联将还没有一个 InventoryID,所以如果他们取消选中一个框并再次选中它, InventoryID 将不再存在于该列表中,因此我无法使用 InventoryID 来检查数据库,我必须通过其他两个字段进行检查

标签: c# entity-framework


【解决方案1】:

我认为这是你需要的,试试这个:

首先检查登录用户的Inventory tablePersonID

 var Inventory = (from r in db.Inventory where r.PersonID== userID select r).ToList();

此列表包含user 的所有车辆列表,没有使用list with the correct field names 循环并删除不在Inventory 中的车辆

考虑NewList 的列表具有正确的字段名称,然后

foreach(var item1 in Inventory)
{
    foreach(var item2 in NewList){
    { 
         if(item1.CarID == item2.CarID) // true only if old vehicle exist
         {
              // break from loop
              break;
         }
         else{
              // remove item1 from Inventory
              db.inventory.remove(item1);
              db.SaveChanges();
         }
    }
}

您还需要将新车添加到数据库中

foreach(var item2 in NewList){
{
    foreach(var item1 in Inventory)
    { 
         if(item1.CarID == item2.CarID) // true only if old vehicle exist
         {
              // break from loop
              break;
         }
         else{
              //code add item2 to Inventory
              db.inventory.add(item2);
              db.SaveChanges();
         }
    }
}

【讨论】:

  • 是的,但是这将有多个添加和删除查询,我希望在实体框架中内置功能以最小化查询但执行相同的任务。
  • 您可以尝试删除item1.CarID == item2.CarID中的所有数据并添加具有正确字段名称的列表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多