使用在多个列上具有主键的实体框架更新数据库

时间:2015-04-01 20:47:19

标签: c# asp.net-mvc linq entity-framework asp.net-mvc-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; }

使用实体框架更新的代码:

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

有人可以帮我解决上面的例外情况吗?

2 个答案:

答案 0 :(得分:0)

在保存更改之前,您确定所有非null属性都有值吗?

在我的情况下,我不得不在视图中添加隐藏值,因此主键将被发布回服务器。

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

答案 1 :(得分:0)

对我来说,问题是数据库中某些列的唯一索引。违反索引导致显示此错误。

但是当我搜索解决方案时,我发现还有其他原因也会导致此错误,例如,确保键具有值且不为null,请检查列的并发设置。