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 个抽象类AddressPersonalDetail以及 2 个派生类AccountHolderNomineePersonalDetail继承address并且进一步AccountHolderNominee继承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"));

现在,当我尝试插入数据时,它会引发异常,即:

在表“地址”上引入 FOREIGN KEY 约束“FK_dbo.Addresses_dbo.Addresses_AccountHolder_AddressId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

谁能告诉我这是什么问题,我该如何解决这个问题?

4

1 回答 1

0

你应该 WillCascadeOnDelete false

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

或使用此代码\

    modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();   
于 2013-03-04T19:30:28.707 回答