Entity Framework 4.3 経由でアクセスしようとしている既存のデータベースがあります。ほとんどのテーブルとリレーションシップは問題ではありませんでしたが、この一連のテーブルが原因で、答えが見つからないように見えるいくつかの問題が発生しています。
(圧縮された)エンティティは次のとおりです。
お客様
public class Customer
{
public int CustomerID { get; set; }
public string Name { get; set; }
private int addressSourceTypeID = 2;
[NotMapped]
public int AddressSourceTypeID {
get { return addressSourceTypeID; }
set { addressSourceTypeID = value; } }
public virtual ICollection<User> Users { get; set; }
public virtual ICollection<Contract> Contracts { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
契約
public class Contract
{
public int ContractID { get; set; }
public string Name { get; set; }
private int addressSourceTypeID = 4;
[NotMapped]
public int AddressSourceTypeID {
get { return addressSourceTypeID; }
set { addressSourceTypeID = value; } }
public virtual int CustomerID { get; set; }
public virtual Customer Customer { get; set; }
//public virtual ICollection<Address> Addresses { get; set; }
}
住所
public class Address
{
[Key]
public int AddressID { get; set; }
public int AddressSourceTypeID { get; set; }
[ForeignKey("Customer")]
public int SourceKey { get; set; }
public virtual Customer Customer { get; set; }
//public virtual Contract Contract { get; set; }
public virtual ICollection<Contact> Contacts { get; set; }
}
上にあるのは 2 つのエンティティCustomer
でありContract
、両方とも子エンティティを持つことができますAddress
。現在、Address
エンティティはエンティティの子になるように設定されており、fromCustomer
へのリンクがないため、これは正常に機能します。Contract
Address
コメントアウトされたコードセグメントからわかるように、エンティティで行ったのと同じようにContract
、エンティティに追加しようとしました。残念ながらこれは機能しませんが、ForeignKey アノテーションで が参照されているため、驚くことではありません。特定のバージョンのエンティティ (つまり) を作成しようとしましたが、複数のエンティティが同じテーブルにバインドしようとするとエラーが発生します。Address
Customer
Customer
Address
Address
CustomerAddress
ModelBuilder
EFでも使用してみましたDBContext
が、ここでの知識はかなり限られているため、この場合の方法がわかりません。
全体として、私が必要とするのは次のとおりです。
- 子 Addresses のコレクションを持つ Customer エンティティ。
- 子アドレスのコレクションを持つコントラクト エンティティ。
これらの「親」テーブルから Address テーブルへのリンクには、次のものが使用されます。
- Customer: CustomerID => Address: SourceKey AND Customer: AddressSourceTypeID (常に 2) => Address: AddressSourceTypeID.
- コントラクト: ContractID => アドレス: SourceKey AND コントラクト: AddressSourceTypeID (常に 4) => アドレス: AddressSourceTypeID.
誰かが私を助けたり、正しい方向に向けたりすることができれば、それは素晴らしいことです.
どうもありがとう。