次のテーブル構造があります。
Affiliations
Id Party1 Party2
1 100 200
2 300 400
そして、アフィリエーションの FK を通じて参照されるテーブル
Parties
Id Name
100 Hank
200 Ted
300 Kim
400 Joe
Party エンティティ (図示せず) を使用して、Fluent API を使用してテーブル間の関係を定義します。
modelBuilder.Entity<Party>()
.HasMany(c => c.LeftPartyAffiliations)
.WithRequired()
.Map(m => m.MapKey("Party1"));
modelBuilder.Entity<Party>()
.HasMany(c => c.RightPartyAffiliations)
.WithRequired()
.Map(m => m.MapKey("Party2"));
パーティ エンティティは、左右の関係をそれぞれのプロパティLeftPartyAffiliationsおよびRightPartyAffiliationsにマップします。上記のルールを定義することで、EF は自動的にParty1とParty2を Affiliations テーブルに追加します。
私の問題は、各所属の値が正しくマップされている一方で、パーティの関係を通じてこれらのテーブルを自分の列にマッピングしているため、左側と右側の所属 ID を知る方法がないという事実にあります。
たとえば、所属エンティティを介して実際の Party1 および Party2 ID にアクセスできるようにしたいと考えています。
public class PartyAffiliation
{
...
[Column("Party1")]
public int Party1 { get; set; }
[Column("Party2")]
public int Party2 { get; set; }
...
}
...しかし、Fluent API を介して Party から Left および Right コレクションにマッピングすることで、既に関係を定義しているため、これは不可能です。
完璧な状況では、Fluent API マッピングを実行できます。これにより、列と関係が作成され、所属マッピングで定義された物理列を介して Party1 および Party2 ID にアクセスできるようになります。
エンティティと Fluent API でプロパティを物理的に定義しようとすると、次のようになります。
型の各プロパティ名は一意である必要があります。プロパティ名はすでに定義されています 'xxx'
この問題の回避策、またはデータベースにフィールドを物理的に追加せずに列を複数のプロパティにマッピングする方法はありますか?