例如,有以下类:
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; }
}
这是一个现状:
- MACHINE1
- Detail1
- 机器2
- Detail2
我只想将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生成唯一键值。
这似乎是一个错误!
或者我做错了什么?