私はEFCodeFirstにかなり慣れていないので、これは(願わくば!)簡単な質問かもしれません。
私は人と住所の間に単純な関係があります:
People
------
PersonID
Name
Address
-------
AddressID
Address1
PersonID
ほとんどの場合、PeopleテーブルにAddressIDがあります。ただし、このデータベースは、PersonIDを参照するという点で、少し「逆方向」です。私のコードでは、Personオブジェクトを処理し、それらに関連付けられたアドレスを取得したいと考えています。関係は、多くの住所を持つ1人の場合もありますが、常に1:1です。(これはサードパーティのDBです-スキーマを制御できません。)
個人と住所を関連付けるために、Code Firstで関係を設定するにはどうすればよいですか?流暢なAPIを使用していますが、両方のエンティティにキーがないと設定する方法がわかりません。理想的には、エンティティを次のように設定する必要があります。
Person {
public int PersonID {get;set;}
public string Name {get;set;}
//other person properites
//navigation property
public Address Address {get;set;}
}
Address {
public string Address1 {get;set;}
//other properties for address
//navigation property
public Person Person {get;set;}
}
関係を構成するいくつかの方法を試しましたが、エラーが発生し続けます。Addressクラスを複合型として定義しようとしましたが、それは別のテーブルなので、それは機能しますか?また、HasOptionalとWithOptionalDependantを使用してみましたが、役に立ちませんでした。
したがって、アドレスがPerson内のエンティティになるようにEFCFロジックを最適に構成する方法についての考え。
どんな提案や助けも大歓迎です。
更新 以下のMarkの提案を試しましたが、別のエラーが発生します。(私のコメントを参照してください)
My Addressエンティティの設定では、PersonIDをエンティティキーとして設定します。
modelBuilder.Entity<Address>()
.HasKey(a => a.PersonID);
modelBuilder.Entity<Address>()
.Property(a => a.PersonID)
.HasColumnName(<my real column name>);
したがって、DB内のエンティティのキーはPersonIDですが、PersonへのFKでもあります。これが問題の原因ですか?(繰り返しますが、私のDBではありません-サードパーティです。)どんな助けでも大歓迎です。ありがとう!!