1

我有一個公司的模式:OnCascadeDelete和Entity Framework

public class Company 
{ 
    public int Id { get; set; } 

    ... 

    public virtual ICollection<Useraccount> Useraccounts { get; set; } 
} 

並有useraccount模型:

public class Useraccount 
{ 
    public int Id { get; set; } 

    ... 

    public virtual ICollection<Company> Companies { get; set; } 
} 

所以這是上午:n連接:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();    

     modelBuilder.Entity<Company>() 
      .HasMany(c => c.Useraccounts).WithMany(i => i.Companies) 
      .Map(t => t.MapLeftKey("CompanyId") 
       .MapRightKey("UseraccountId") 
       .ToTable("UseraccountCompany"));    
    } 

然而,一個例外是初始化數據庫時拋出。

隨着

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 

初始化工作。

我想繼續刪除級聯,但我不知道如何管理它。 我也想保留這兩個虛擬屬性,這樣我就可以從一個公司和這個用戶帳戶訪問這些公司的useraccounts。

例外順便說一句是:

引入外來KEY約束「Company_Useraccounts_Target」上表 「UseraccountCompany」可能會導致循環或多個級聯路徑。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。不能創建約束。

回答

0

這應該工作(您可能沒有在您的模型中發佈一些相關位 - 流暢的配置)。

,當你有一些「自我參照」實體 (直接或間接)通常出現 - 但我沒有看到這裏,這是典型的 許多一對多。

但是,如果問題仍然存在,您可以始終自己實現連接表 - 通過對級聯的更多控制 - 並且通常可以解決問題(如果可能)。

我討厭重新鍵入:) - 這裏幾乎是確切的問題 - 多對多手動完成(第2部分)。

EF5 And cycles or multiple cascade paths, FOREIGN KEY

看一看,看看是否有幫助。

+0

但是在那裏設置了「禁用級聯刪除」(.WillCascadeOnDelete(false);)。 – mosquito87 2013-04-05 07:59:25

+0

我不確定你在問什麼 - 「只要將其設置爲真」,這是否可行? – NSGaga 2013-04-05 10:00:51