2

タイトルは誤解を招くかもしれませんが、今のところ、探しているものに適切な言葉を組み立てることができないようです.

現状では、エンティティ A には多くのエンティティ Bありますが、エンティティ B にはエンティティ A の外部キーは含まれません。

それはどのように機能しますか?

最初は、モデルで次のプロパティを使用することを考えました。

public virtual ICollection<B> Bs { get; set; }

しかし、それは B が A への外部キーを持っている場合です。それともこれは問題ではありませんか?B に外部キーがない場合、A と B を関連付けるためだけに別のモデルを作成する必要がありますか?

4

1 に答える 1

1

エンティティ B からエンティティ A への FK が存在できない理由はわかりませんが、何らかの参照制約がなければ、2 つのエンティティ間をトラバーサルすることはできません (つまり、特定の A ごとにすべての B を抽出することはできません。また、特定の B の A を抽出することはできません)。私がお伝えできる最も簡単な方法は、その FK を追加することですが、それが不可能な場合は、単にエンティティ B のプロキシ/マップとして機能する別のエンティティを作成する必要があります。BProxy エンティティは、 B エンティティ。

public class BProxy 
{
     [Key]
     public int Id {get; set;}
     [Required]
     public int EntityBId {get; set;}
     public virtual EntityB {get; set;}
     [Required]
     public int EntityAId {get; set;}
     public virtual EntityA {get; set;}
}

エンティティ A は、B オブジェクトの代わりに BProxy オブジェクトのコレクションを持つことになります。

public virtual ICollection<BProxy> BProxies { get; set; }

このようにして、LINQ を介してリレーションシップを双方向にトラバースするクエリを作成できます。

于 2013-01-11T05:51:46.907 に答える