当我调用SaveChangesAsync时,我有一个例外。 我的架构非常简单,我有一个Category类,包含
public class Category {
public Guid ID {get; set;}
public Guid? ParentId {get; set;}
public Category Parent {get; set;}
[...]
}
当我想在数据库中插入一个新类别(连接到我的ASP MVC应用程序)时,我在执行插入之前设置了GUID。 当我的数据库为空并且我想插入父类别时发生错误(所以使用null Guid IdParent和null Parent)。如果我设置父值,则不会发生这种情况。我可以通过Visual Studio将父设置为Null来手动添加记录。
我有以下错误:
INSERT语句与FOREIGN KEY SAME TABLE冲突 约束“FK_Category_Category_ParentId”。冲突发生在 数据库“HT_Root”,表“dbo.Category”,列“ID”。该声明 已被终止。
我在堆栈溢出上搜索了一个简单的答案,但没找到它。 我尝试使用Fluent API:
modelBuilder.Entity<Category>().HasOne(s => s.Parent).WithMany().HasForeignKey(s => s.ParentId);
但没有改变。我做错了什么?
答案 0 :(得分:1)
似乎在EF 7中发生了变化See this github issue
尝试
public class Category
{
public Guid ID {get; set;}
public Guid? ParentId {get; set;}
public Category Parent {get; set;}
public ICollection<Categories> Children {get; set;}
}
并且
modelBuilder.Entity<Category>()
.HasOne(x => x.Parent)
.WithMany(x => x.Children)
.HasForeignKey(x => x.ParentId)
.Required(false);
您还应始终检查数据库中是否存在ParentId(如果已指定)。注意添加Guid.Empty
(00000000-0000-0000-0000-000000000000)而不是null
,因为这可能会导致问题。