我正在使用Entity Framework来填充网格控件.有时当我进行更新时,我收到以下错误:
存储更新,插入或删除语句会影响意外的行数(0).自实体加载后,实体可能已被修改或删除.刷新ObjectStateManager条目.
我无法弄清楚如何重现这一点.但它可能与我进行更新的距离有多大关系.有没有人看过这个或有没有人知道错误信息是指什么?
编辑:不幸的是我不再自由地重现我在这里遇到的问题,因为我离开了这个项目并且不记得我是否最终找到了解决方案,如果另一个开发人员修复它,或者我是否解决了这个问题.因此我不能接受任何答案.
当我尝试保存对上下文所做的更改时,我不断收到以下错误:
存储更新,插入或删除语句会影响意外的行数(0).自实体加载后,实体可能已被修改或删除.刷新ObjectStateManager条目.
我有以下课程:
人
public class Person : IPerson
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Name
{
get
{
return FirstName + " " + LastName;
}
set{}
}
public string Email { get; set; }
public DateTime? LastModified { get; set; }
public virtual ICollection<Result> Results { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
用户资料
public class UserProfile : Person
{
public …Run Code Online (Sandbox Code Playgroud) 在context.SaveChanges()其中一个例外情况下处理几个潜在的异常时OptimisticConcurrency.有关此问题的Microsoft文档,请访问http://msdn.microsoft.com/en-us/library/bb399228.aspx,对于EF 4.x进行了讨论.
try
{
// Try to save changes, which may cause a conflict.
int num = context.SaveChanges();
Console.WriteLine("No conflicts. " +
num.ToString() + " updates saved.");
}
catch (OptimisticConcurrencyException)
{
// Resolve the concurrency conflict by refreshing the
// object context before re-saving changes.
context.Refresh(RefreshMode.ClientWins, orders);
// Save changes.
context.SaveChanges();
Console.WriteLine("OptimisticConcurrencyException "
+ "handled and changes saved");
}
Run Code Online (Sandbox Code Playgroud)
...但是在EF 5.0(RC)上,这似乎不起作用,因为Refresh()我的EF5,代码优先,DbContext派生context类上不存在.
我确实看到了context.Entry(context.SalesOrderHeaders).Reload();- 但这似乎是一个直接从db重新加载而不是刷新/合并(与策略客户端获胜).
任何想法如何处理EF5中的乐观并发异常?实际上甚至在SaveChanges()中关于异常处理的一般指针都会很好
谢谢
我首先使用实体框架代码,并得到以下编译错误.dbcontext不包含"刷新"的定义.我已经看到许多使用Refresh方法的例子.但是当我将Refresh方法添加到我的dbcontext时,我得到了一个complilation错误.我正在使用以下命名空间.
using System.Data;
using System.Data.Entity;
using System.Data.Linq;
Run Code Online (Sandbox Code Playgroud)
Am I missing one? I tried to look it up but did not find the namespace.