实体框架代码首先自引用ID插入错误的实体

时间:2018-05-01 22:22:52

标签: entity-framework ef-code-first entity-framework-core

我首先使用EF Core 2.0插入代码表时遇到问题。

我在调用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时,我可以看到一个对象的insert语句,如下所示: Object im trying to save

显然是在尝试再次插入我的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;
}

真的希望有人可以提供帮助 - 提前谢谢!

2 个答案:

答案 0 :(得分:0)

您需要的是改变您设置模型的方式。对于自引用,你应该做这样的事情(也可以参考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; }
}

答案 1 :(得分:0)

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