繁体   English   中英

EF 7:INSERT语句与FOREIGN KEY SAME TABLE冲突

[英]EF 7 : INSERT statement conflicted with the FOREIGN KEY SAME TABLE

当我调用SaveChangesAsync时,我有一个例外。 我的架构非常简单,我有一个类别,包含

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);

但没有改变。 我究竟做错了什么 ?

它似乎在EF 7中发生了变化。 请参阅此github问题

尝试

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因为这可能会导致问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM