2013-03-04 73 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