如何使用自引用EFCore创建模型

时间:2019-04-18 13:34:39

标签: c# code-first ef-fluent-api self-reference ef-core-2.1

我创建了一个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”列中发生了冲突。

1 个答案:

答案 0 :(得分:0)

请尝试将OnModelCreating更改为

 .HasForeignKey(entity => entity.TagMotherID);