我有列表对象,并尝试检查并更新该列表中的这些项目,这是我的代码:
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();
}
在第一个循环中,everthing很好但在下一个我得到一个错误:
附加“DataRetention.Core.DataEntities.WareHouseEntites.UsageSessionWareHouse”类型的实体失败,因为同一类型的另一个实体已具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图表,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。
我不知道如何更新像DbSet.Add(item)。
答案 0 :(得分:0)
找到您可以直接编辑的记录后,您不必再次进行附加,或者已经为您跟踪了EntryState.modified