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