我正在使用实体框架来填充网格控件。有时当我进行更新时,我得到以下错误:
存储更新、插入或删除语句影响了意外的行数(0)。实体可能在加载实体后已被修改或删除。刷新ObjectStateManager条目。
我不知道怎么复制这个。但这可能和我更新的时间间隔有关系。有人见过这个吗,或者有人知道错误消息指的是什么吗?
编辑:不幸的是,我不再有自由重现我在这里遇到的问题,因为我离开了这个项目,不记得我最终是否找到了解决方案,是否有其他开发人员修复了它,或者是否我绕过了它。因此我不能接受任何回答。
我正在使用实体框架来填充网格控件。有时当我进行更新时,我得到以下错误:
存储更新、插入或删除语句影响了意外的行数(0)。实体可能在加载实体后已被修改或删除。刷新ObjectStateManager条目。
我不知道怎么复制这个。但这可能和我更新的时间间隔有关系。有人见过这个吗,或者有人知道错误消息指的是什么吗?
编辑:不幸的是,我不再有自由重现我在这里遇到的问题,因为我离开了这个项目,不记得我最终是否找到了解决方案,是否有其他开发人员修复了它,或者是否我绕过了它。因此我不能接受任何回答。
当前回答
您需要显式地包含主键的BoundField。如果你不想让用户看到主键,你必须通过css隐藏它:
<asp:BoundField DataField="Id_primary_key" ItemStyle-CssClass="hidden"
HeaderStyle-CssClass="hidden" />
其中'hidden'是css中的一个类,它的显示设置为'none'。
其他回答
我也有同样的问题,@webtrifusion的答案帮助我找到了解决方案。
我的模型使用实体ID上的绑定(排除)属性,这导致实体ID的值在HttpPost上为零。
namespace OrderUp.Models
{
[Bind(Exclude = "OrderID")]
public class Order
{
[ScaffoldColumn(false)]
public int OrderID { get; set; }
[ScaffoldColumn(false)]
public System.DateTime OrderDate { get; set; }
[Required(ErrorMessage = "Name is required")]
public string Username { get; set; }
}
}
当我不小心试图更新对象而不是保存时,我得到了这个问题!
我有
if (IsNewSchema(model))
unitOfWork.SchemaRepository.Update(schema);
else
unitOfWork.SchemaRepository.Insert(schema);
我本应该这样做的
if (IsNewSchema(model))
unitOfWork.SchemaRepository.Insert(schema);
else
unitOfWork.SchemaRepository.Update(schema);
我得到了同样的错误,因为PK的一部分是datetime列,而插入的记录使用了datetime。现在作为这一列的值。实体框架将以毫秒级精度插入值,然后以毫秒级精度查找刚刚插入的值。然而,SqlServer将该值舍入到秒精度,因此实体框架无法找到毫秒精度值。
解决方案是截断DateTime中的毫秒。在插入之前。
只是确保表和形式都有主键和edmx更新。
我发现更新期间的任何错误通常是因为: —表中没有主键 -在编辑视图/表单中没有主键(例如@Html.HiddenFor(m=> m.d id)
我也有同样的问题。但这是我自己的失误。实际上,我是保存一个对象,而不是添加它。这就是矛盾所在。