使用Entity Framework更新具有多个列主键的数据库

4

以下是我收到的错误信息:

存储更新、插入或删除语句影响了意外数量的行 (0)。自从实体被加载以来,可能已经修改或删除了实体。请参阅 http://go.microsoft.com/fwlink/?LinkId=472540 以了解如何理解和处理乐观并发异常。

我的模型包含几列,其中两列构成了聚集主键:

[Key]
[Column(Order = 0)]
public string SourceName { get; set; }
[Key]
[Column(Order = 1)]
public string SourceType { get; set; }

使用Entity Framework更新的代码:

 _Entities.SourceInfoes.Attach(entity);
 _Entities.Entry(entity).State = EntityState.Modified;
 _Entities.SaveChanges();

有人能帮我解决上述异常吗?


你的“Update”函数是否在任何for循环或计时器中?大多数情况下,我注意到当_ Entities.SaveChanges()正在执行(但尚未完成)并且同时可能会发生EF READ以读取相同行(相同记录)时,会出现此错误。这些代码片段很难提供帮助。 - sam
也许乐观并发实际上已经配置,而entity已经连接,但是没有(或者带有过期的)并发标记。没有足够的细节来回答这个问题。 - Gert Arnold
2个回答

0
对我来说,问题出在数据库中某些列上的唯一索引。违反了索引就会导致显示此错误。
但是当我寻找解决方案时,我发现这个错误还有其他原因,比如确保键具有值且不为空,检查列的并发设置等。

0

在保存更改之前,您是否确保所有非空属性都有值?

在我的情况下,我不得不在视图中添加一个隐藏的值,以便主键可以被发送回服务器。

@Html.HiddenFor(model => model.Id)

我没有隐藏任何列。 - Hello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接