EFCore 自身关联

平时我们开发中有一种关联是自身关联,在EFcore中如何实现呢?如果是自身关联多次又如何实现,看代码,EFCore还是很强大的。

  public class Item
    {
        private Item() { }

        public Item(string itemName)
        {
            ItemId = Guid.NewGuid();
            ItemName = itemName;
        }

        public Guid ItemId { get; set; }
        public string ItemName { get; set; }

        public Guid? NextItemId { get; set; }
        public virtual Item NextItem { get; set; }
        public virtual List<Item> ParentNextItems { get; set; }

        public Guid? PreviousItemId { get; set; }
        public virtual Item PreviousItem { get; set; }
        public virtual List<Item> ParentPreviousItems { get; set; }
    }

对应的DBContext.

 public class DataContext : DbContext
    {
        public DataContext(DbContextOptions<DataContext> options):base(options)
        {

        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Item>()
           .HasKey(x => x.ItemId);
            modelBuilder.Entity<Item>()
                .HasOne(x => x.NextItem).WithMany(x => x.ParentNextItems).HasForeignKey(x => x.NextItemId)
                .Metadata.DeleteBehavior = DeleteBehavior.Restrict;
            modelBuilder.Entity<Item>()
                .HasOne(x => x.PreviousItem).WithMany(x => x.ParentPreviousItems).HasForeignKey(x => x.PreviousItemId)
                .Metadata.DeleteBehavior = DeleteBehavior.Restrict;
        }

        public DbSet<Item> Item { get; set; }

 

posted @ 2020-11-18 23:21  LearningAlbum  阅读(786)  评论(0)    收藏  举报