我首先使用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语句,如下所示:
显然是在尝试再次插入我的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;
}
真的希望有人可以提供帮助 - 提前谢谢!
答案 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