EF Core 遇到“可能會導致循環或多重級聯路徑”


在ef core中你可能會設計這樣一個實體:

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 }

意思就是:一個顧客可能有上級顧客,同時也可能有多個孩子顧客。

當我們在進行數據遷移的時候會報錯:

將 FOREIGN KEY 約束 '******' 引入表 'Customers' 可能會導致循環或多重級聯路徑。請指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 約束。
無法創建約束或索引。請參閱前面的錯誤。

 

你可能需要這樣配置來解決這個問題:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM