Asp.net mvc EntityState上存在冲突。是否因为同一模型类的两个对象而修改?
我需要跟踪和存储修改。为了做到这一点,我想应用以下技巧:Asp.net mvc EntityState上存在冲突。是否因为同一模型类的两个对象而修改?,asp.net-mvc,entity-framework,linq,Asp.net Mvc,Entity Framework,Linq,我需要跟踪和存储修改。为了做到这一点,我想应用以下技巧: public ActionResult Edit(Employee employee) { var rcd_BFEmployee = db.Employees.Find(employee.Id); if(rcd_BFEmployee.Email != employee.Email) { // Other Stuff } db.Entry(employee).State = EntitySta
public ActionResult Edit(Employee employee)
{
var rcd_BFEmployee = db.Employees.Find(employee.Id);
if(rcd_BFEmployee.Email != employee.Email)
{
// Other Stuff
}
db.Entry(employee).State = EntityState.Modified;
// Here is the confliction
}
附加“Models.Employee”类型的实体失败,因为另一个
相同类型的实体已具有相同的主键值
如何强制仅在作为参数接收的对象上应用修改状态?使用
Employee.Find(Employee.Id)
检索Employee
的实例,该实例现在附加到DbContext
,并且正在跟踪。对SaveChanges
的任何调用都将更新数据库中的该实体
在代码的底部,您试图通过调用db.Entry(employee).State=EntityState.Modified来附加和跟踪传入的实例employee
代码>。这指向与第一行上先前检索到的实例相同的数据存储记录
解决
所有这些都是可行的解决方案:
不要调用db.Entry(employee.State=EntityState.Modified
,使用检索到的rcd\u BFEmployee
实例并对其进行更改。您可以将状态从employee
复制到此实例
直接附加employee
,而不检索rcd\u BFEmployee
检索rcd\u BFEmployee
,但要使用,这样它就不会被DbContext
跟踪
var rcd_BFEmployee = db.Employees.AsNoTracking().Single(i => i.Id == employee.Id);
Context.Entry(rcd_BFEmployee).State = EntityState.Detached;
检索rcd\u bfeemployee
,但分离实例,使其不会被DbContext
跟踪
var rcd_BFEmployee = db.Employees.AsNoTracking().Single(i => i.Id == employee.Id);
Context.Entry(rcd_BFEmployee).State = EntityState.Detached;
您是否尝试过使用DbSet员工的Attach方法
db.Employees.Attach(employee);