有兩個實體,關系如下:
public class CatalogNodeEntity : FullAuditedEntity<Guid>, IMultiTenant {
public virtual string Name { get; protected set; } public virtual string DisplayName { get; protected set; } private List<CatalogLayerEntity> Layers = new List<CatalogLayerEntity>(); }
public class CatalogLayerEntity:FullAuditedEntity<Guid>, IMultiTenant { public virtual string Name { get; protected set; } public virtual Guid? CatalogNodeId { get; set; } public virtual CatalogNodeEntity CatalogNode { get; set; } }
配置one to many 的實體關系,可這樣配置
builder.Entity<CatalogNodeEntity>(m => { m.ToTable(options.TablePrefix + "CatalogNode", options.Schema); m.ConfigureByConvention(); m.Property(o => o.Name).IsRequired().HasMaxLength(CatalogConsts.MaxNameLength); m.HasMany(u => u.Layers).WithOne(u=>u.CatalogNode).HasForeignKey(u=>u.CatalogNodeId).OnDelete(DeleteBehavior.Cascade); });
這里有個坑需要注意,如果在WithOne的函數中沒有指定實體,又在HasForeignKey中指定了外鍵,這是進行Migration就會出現兩個外鍵
m.HasMany(u => u.Layers).WithOne().HasForeignKey(u=>u.CatalogNodeId).OnDelete(DeleteBehavior.Cascade);