2013-03-04 48 views
0

我使用Code First方法創建數據庫。我正在嘗試使用TPH(每層次表)繼承。我的POCO類:如何在代碼中實現多級繼承優先

public abstract class Address 
{ 
    public int AddressId { get; set; } 
    ... 
} 

public abstract class PersonalDetail : Address 
{ 
    public int PersonalDetailId { get; set; } 
    ... 
} 

public partial class AccountHolder : PersonalDetail 
{ 
    public int AccountHolderId { get; set; } 
} 

public partial class Nominee : PersonalDetail 
{ 
    public int NomineeId { get; set; } 
} 

我已經創建了2抽象類地址PersonalDetail和2派生類賬戶持有提名PersonalDetail繼承地址和進一步賬戶持有提名繼承PersonalDetail。我一口流利的API代碼是:

 modelBuilder.Entity<Address>().Map<PersonalDetail>(m => m.Requires("AddressOf")); 
     modelBuilder.Entity<PersonalDetail>().Map<AccountHolder>(m => m.Requires("PersonalDetailOf")); 
     modelBuilder.Entity<PersonalDetail>().Map<Nominee>(m => m.Requires("PersonalDetailOf")); 

現在,當我試圖插入它拋出一個異常數據,即:

表上引進國外KEY約束'FK_dbo.Addresses_dbo.Addresses_AccountHolder_AddressId「地址」可以導致週期或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。

任何人都可以請告訴我最新的問題,我該如何解決這個問題?

回答

0

你應該WillCascadeOnDelete假

modelBuilder.Entity<T>() 
        .HasRequired(e => e.) 
        .WithMany(t => t.) 
        .HasForeignKey(e => e.) 
        .WillCascadeOnDelete(false); 

或者使用此代碼\

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
+0

我用'modelBuilder.Conventions.Remove ();'但仍是同樣的錯誤,可以請你詳細說明你的解決方案,我是Code First世界的全新,謝謝! – gaurav 2013-03-05 03:38:27