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 つの派生クラスAccountHolderNomineeを作成しました。PersonalDetailは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"));

データを挿入しようとすると、例外がスローされます。つまり、次のようになります。

テーブル 'Addresses' に 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 に答える