【发布时间】:2018-05-01 22:22:51
【问题描述】:
我无法先使用 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 时,我可以看到对象的插入语句如下所示:
显然是在尝试再次插入我的 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;
}
真的希望有人可以提供帮助 - 在此先感谢!
【问题讨论】:
-
从您的屏幕截图看来,您的主要对象的 id 设置为 (-2147482647)。你将它初始化为最小值还是什么?
-
不,我没有猜到这是默认的 int 值? ,我应该删除该属性上的设置器吗?
-
您保存数据的方式似乎存在问题。在您调用
context.Departments.Add之前,ID 是否设置为那个大的 -ve 数字? -
不确定,明天早上会跟进@smit
-
不,调用context.departments.Add()之前ID为0
标签: entity-framework ef-code-first entity-framework-core