3

データベースを作成するためにコードファーストアプローチを使い始めたところです。私は次の3つのテーブルを持っています:

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

    public virtual List<Address> Address { get; set; }
}

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

    public virtual List<Address> Address { get; set; }
}

public partial class Address
{
    public int AddressId { get; set; }

    public int AccountHolderId { get; set; }
    public AccountHolder AccountHolder { get; set; }

    public int NomineeId { get; set; }
    public Nominee Nominee { get; set; }
}

ここAccountHolderNominee両方が1 to *アドレスとの関係を持っています。私がこれに使用した流暢なAPIコードは次のとおりです。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Address>().HasRequired(p => p.AccountHolder)
                                      .WithMany(p => p.Address)
                                      .HasForeignKey(p => p.AccountHolderId)
                                      .WillCascadeOnDelete(false);
        modelBuilder.Entity<Address>().HasRequired(p => p.Nominee) 
                                      .WithMany(p => p.Address)
                                      .HasForeignKey(p => p.NomineeId)
                                      .WillCascadeOnDelete(false);
    }

今私の問題は、AccountHolderまたはNomineeにデータを挿入しようとすると、この例外が発生することです。

AccountHolder挿入の場合

{"INSERTステートメントがFOREIGNKEY制約\"FK_dbo.Addresses_dbo.Nominees_NomineeId\"と競合しました。競合はデータベース\"CodeFirst.BankContext\ "、テーブル\" dbo.Nominees \ "、列'NomineeId'で発生しました。\r \nステートメントは終了しました。"}

ノミニー挿入の場合

{"INSERTステートメントがFOREIGNKEY制約\"FK_dbo.Addresses_dbo.AccountHolders_AccountHolderId\"と競合しました。競合はデータベース\"CodeFirst.BankContext\ "、テーブル\" dbo.AccountHolders \ "、列'AccountHolderId'で発生しました。\r \nステートメントは終了しました。"}

誰かがこの問題を解決する方法と私がここで欠けているものを教えてください?

4

2 に答える 2

4

Nomineeに存在しないAddressNominees_NomineeIdを挿入しようとしました。最初にNomineeのインスタンスを入力してから値を入力し、Addressを作成して最後にAccountHolderのインスタンスを作成してから保存する必要があります。

于 2013-03-03T13:14:28.253 に答える
1

テーブル dbo.AccountHolders と dbo.Nominees には、別のテーブルへの外部キー参照があります。FK が機能する方法は、参照されるテーブルの主キー列にもない値をその列に持つことはできないということです。

SQL Server Management Studio がある場合は、それを開いて sp_help 'dbo.dbo.Nominees' を実行します。FK がどの列にあり、どのテーブルのどの列が参照されているかを確認します。悪いデータを挿入しています。sp_help 'dbo.dbo.AccountHolders' についても同じことを行ってください。

お役に立てれば。

于 2013-03-03T13:18:17.580 に答える