在ef core中你可能会设计这样一个实体:ide
public class Customer : Entity,IMustHaveTenant, IHasCreationTime { public Customer() {
this.ChildrenCustomers = new List<Customer>(); }
//……
/// <summary> /// 父级顾客 /// </summary> public int? ParentCustomerId { get; set; }
#region 导航属性
/// <summary> /// 父顾客 /// </summary> public virtual Customer ParentCustomer { get; set; } /// <summary> /// 孩子顾客 /// </summary> public virtual ICollection<Customer> ChildrenCustomers { get; set; } #endregion }
意思就是:一个顾客可能有上级顾客,同时也可能有多个孩子顾客。ui
当咱们在进行数据迁移的时候会报错:this
将 FOREIGN KEY 约束 '******' 引入表 'Customers' 可能会致使循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其余 FOREIGN KEY 约束。
没法建立约束或索引。请参阅前面的错误。spa
你可能须要这样配置来解决这个问题:设计
protected override void OnModelCreating(ModelBuilder modelBuilder) { string tableNamePrefix = "WXShop_"; var customer = modelBuilder.Entity<Customer>(); customer.ToTable(tableNamePrefix + "Customers"); customer .HasMany(t => t.ChildrenCustomers) .WithOne(t => t.ParentCustomer) .HasForeignKey(t => t.ParentCustomerId) .OnDelete(DeleteBehavior.Restrict); base.OnModelCreating(modelBuilder); }