Entity Framework 代码优先自引用 ID 插入了错误的实体

Entity Framework Code first self referencing ID inserts wrong entity

我在首先使用 EF Core 2.0 插入 table 时遇到问题。

我在调用 context.SaveChanges()

时遇到此异常
Cannot insert explicit value for identity column in table 'Departments' when IDENTITY_INSERT is set to OFF.

这是我的模型:

public class Department 
{
  public int ID { get; set; }
  public string Name { get; set; }
  public int? ParentDepartmentID { get; set; }
  public Department ParentDepartment { get; set; }
}

当我使用 SQL Server Profiler 时,我可以看到对象的插入语句如下所示:

显然正在尝试再次插入我的 ParentDepartment。

exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Departments] ([ID], [Name], [ParentDepartmentID])
VALUES (@p0, @p1, @p2);
',N'@p0 int,@p1 nvarchar(4000),@p2 int',@p0=1,@p1=N'Aalborg',@p2=NULL

我保存上面显示的对象的保存函数如下所示:

public string Save()
{
  string result = this.Validate();

  if (result.Equals(""))
  {
    using (LinerContext context = new LinerContext())
    {
      context.Departments.Add(this);
      context.SaveChanges();
    }
  }
  return result;
}

真的希望有人能帮忙 - 提前致谢!

您可能需要更改设置模型的方式。对于自引用,您可能应该做这样的事情(也可以参考 this answer 以了解模型创建的 Fluent API 实现):

public class Department 
{
    public int ID { get;set; }
    public string Name { get;set; }
    public int? ParentDeparmentId { get; set; }

    [ForeignKey("ParentDeparmentId ")]
    public Department ParentDeparment { get; set; }
}

已修复;我只需要将父部门附加到 dbset