0

最初に既存のデータベースでコードを使用しようとしています。ここまではうまくいきましたが、今は 1 対多対 1 の関係で失敗しています。

データベースにはテーブル customer とテーブル address があり、アドレスには customerid はありませんが、外部の 1 対多キー FK_Address_Customer があります。

edmx から自動作成されたクラスは次のようになります

お客様:

public int CustomerID (PK)
public Address Address

住所:

public int AddressID (PK)
public HashSet<Customer> Customers

流暢な API で何をしても、無効な列 Address_AddressID で失敗するか、参照制約エラーで多重度が競合します。

私は仮定しました:

//Customer has one address, address can have multiple customers<br/>
pModelBuilder.Entity<Customer>().HasRequired(m => m.Address).WithMany(x => x.Customers);


//Address has multiple customers, customer has one address<br/>
pModelBuilder.Entity<Address>().HasMany(m => m.Customers).WithRequired();

HasForeignKeyを使用してデータベースに外部キーがない他のテーブルでこれを修正しましたが、上記のシナリオでは機能しません。また、MapKey を介して外部キー名を渡そうとしましたが、運もありませんでした。

この単純な関係をどのように進めればよいでしょうか?

ありがとう

4

1 に答える 1

2

CustomerテーブルでEFにFKの名前を指定する必要があります。指定しない場合、デフォルトが使用されますAddress_AddressIDHasForeignKey魔法をします。

pModelBuilder.Entity<Customer>()
             .HasRequired(c => c.Address)
             .WithMany(a => a.Customers)
             .HasForeignKey(c => c.AddressID);

エンティティAddressIDのFKプロパティはどこにありますか。CustomerエンティティにFKプロパティがない場合は、Customer次を使用する必要がありますMap

pModelBuilder.Entity<Customer>()
             .HasRequired(c => c.Address)
             .WithMany(a => a.Customers)
             .Map(m => m.MapKey("AddressID"));

AddressID表のFK列の名前はどこにありますかCustomer。1対多の関係を持たせるには、常にその列が必要です。

エンティティにFKプロパティがある場合とない場合の違いにより、EFでサポートされている2種類の関連付けが異なります。

于 2012-08-18T08:15:53.193 に答える