【问题标题】:Entity FrameWork How to update list record实体框架如何更新列表记录
【发布时间】:2017-03-06 11:09:18
【问题描述】:

我有列表对象并尝试检查和更新该列表中的这些项目这是我的代码:

using (var uow = new WareHouseUnitOfWork(WareHouseConnection))
{
  foreach (var item in lData)
  {
    if (uow.UsageSessionWareHouseRepository.Contains(x => x.RadAcctRefId == item.RadAcctRefId))
    {
      uow.UsageSessionWareHouseRepository.Context.Entry(item);
      uow.UsageSessionWareHouseRepository.DbSet.Attach(item);
      uow.UsageSessionWareHouseRepository.Context.Entry(item).State = EntityState.Modified;
    }
    else
    {
      uow.UsageSessionWareHouseRepository.DbSet.Add(item);
    }
  }

  session.SessionStatus = "Processed";
  var entry = uow.SessionWareHouseRepository.Context.Entry(session);
  uow.SessionWareHouseRepository.DbSet.Attach(session);
  entry.State = EntityState.Modified;

  uow.Save();
  }

在第一个循环中一切都很好,但在接下来我得到一个错误:

附加类型为“DataRetention.Core.DataEntities.WareHouseEntites.UsageSessionWareHouse”的实体失败,因为同一类型的另一个实体已经具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新实体,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图形,然后将非新实体的状态设置为“未更改”或“已修改”。

我不知道如何像 DbSet.Add(item) 那样更新。

【问题讨论】:

    标签: c# entity-framework transactions updates


    【解决方案1】:

    找到记录后,您可以直接对其进行编辑,您无需再次附加或 EntryState.modified,因为它已经为您跟踪了

    【讨论】:

    • 所以我需要找到记录并为每个对象分配我想要更新的值是正确的吗?
    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多