首页 > 解决方案 > 如何创建具有自引用 EFCore 的模型

问题描述

我创建了一个 wpf 应用程序,并使用 entityFrameworkCore 创建了数据库,但我无法创建具有自引用的模型。我尝试了所有选项

我的模型

public class Tag
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int TagID { get; set; }
        [Required]
        public string Name { get; set; }
        [Required]
        public int TagLevel { get; set; }      
        public int? TagMotherID { get; set; }

        public virtual Tag TagMother { get; set; }
        public virtual ICollection<Tag> ListOfTagsChild { get; set; }
        public virtual ICollection<ArchiveTag> ListOfArchive { get; set; }
}

并在 OnModelCreating 方法中

modelBuilder.Entity<Tag>()
                .HasOne(entity => entity.TagMother)
                .WithMany(entity => entity.ListOfTagsChild)
                .HasForeignKey(entity => entity.TagMotherID);

一个标签可以有一个或零个父级,但他可以有多个子级

有了这个我有这个错误

SqlException:MERGE 语句与 FOREIGN KEY SAME TABLE 约束“FK_Tags_Tags_TagMotherID”冲突。冲突发生在数据库“EFCoreTest”、表“dbo.Tags”、列“TagID”中。

标签: c#code-firstef-fluent-apiself-referenceef-core-2.1

解决方案


请尝试将 OnModelCreating 更改为

 .HasForeignKey(entity => entity.TagMotherID);

推荐阅读