【发布时间】:2016-10-19 07:03:13
【问题描述】:
例如有以下类:
public class Detail
{
public int Id { get; set; }
public int MachineId { get;set; }
public Machine Machine { get; set; }
}
public class Machine
{
public int Id { get; set; }
public ICollection<Detail> Details { get; set; }
}
这是一个当前状态:
- 机器1
- 详情1
- 机器2
- 细节2
我只想将 Detail2 从 Machine2 移动到 Machine1。 试试看:
var machine1 = myDbContext.Machines
.Include(m => m.Details)
.First(m => m.Id == 1);
var machine2 = myDbContext.Machines
.Include(m => m.Details)
.First(m => m.Id == 2);
var detail2 = machine2.Details.First(d => d.Id == 2); // It still works fine
machine2.Details.Remove(detail2);
machine1.Details.Add(detail2);
myDbContext.SaveChanges(); // Exception!
System.InvalidOperationException:无法跟踪实体类型“MyNamespace.Detail”的实例,因为已在跟踪具有相同键的此类型的另一个实例。对于新实体,请考虑使用 IIdentityGenerator 生成唯一键值。
这似乎是一个错误!
还是我做错了什么?
【问题讨论】:
-
您更新了
MachineId上的detail2吗? -
是的,我已经尝试过了,但没有成功。
-
不工作,我用 EF core rc2 测试过你有哪个版本?
-
是的,一定是一个错误。虽然在资源方面只修改细节的
MachineId会更好。
标签: c# entity-framework asp.net-core-mvc entity-framework-core