错误:
其他信息:附加“Entities.Customer”类型的实体失败,因为同一类型的另一个实体已具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新的并且没有收到数据库生成的键值。在这种情况下,使用“添加”方法或“已添加”实体来跟踪图表,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。
我的代码:
public bool Update(TEntity entity)
{
bool result = false;
try
{
EntitySet.Attach(entity);
Context.Entry<TEntity>(entity).State = EntityState.Modified;
Context.SaveChanges();
result = true;
}
catch (Exception)
{
throw;
}
return result;
}
这种方式我工作,我不知道,因为它不再有效
答案 0 :(得分:0)
尝试从db或本地上下文获取实体,然后更新它。例如,在你的捕获块中做它。 在这种情况下catch块的示例:
catch
{
// get entity here
// for example Context.Set<TEntity().Local.FirstOrDefault(selector);
//or .Find() instead of .FirstOrDefault()
Context.Entry(entity).State = EntityState.Modified;
Context.SaveChanges();
}
答案 1 :(得分:0)
使用block:
尝试这种方法try
{
/* For avoiding "Attaching an entity of type 'Xxxxx' failed because another entity of
the same type already has the same primary key value." error use this method like this */
using (var context = new Context.Entry<TEntity>())
{
context.Entry(entity).State = EntityState.Modified; // modified
context.SaveChanges(); //Must be in using block
result = true;
}
}
希望这会有所帮助......