EF Core:将对象从一个集合移动到另一个集合时出错

时间:2016-06-17 12:28:05

标签: c# entity-framework asp.net-core-mvc entity-framework-core

例如,有以下类:

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生成唯一键值。

这似乎是一个错误!

或者我做错了什么?

0 个答案:

没有答案