Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc EntityState上存在冲突。是否因为同一模型类的两个对象而修改?_Asp.net Mvc_Entity Framework_Linq - Fatal编程技术网

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);