シナリオ:
hereで述べたように、追加のプロパティを単純な結合テーブル (多対多の関係) に追加すると、それは隠れた関連付けではなくなります。これらの質問もこれに対処します。
- リレーションシップ情報を使用した Entity Framework の多対多リレーションシップ
- Entity Framework を使用して関連付け (関係) にプロパティを追加するにはどうすればよいですか
既存のコードでは、単純な自動的に非表示のナビゲーション プロパティが既に使用されており、自動生成されたテーブルには若干のカスタマイズが加えられているため、基になる関係テーブルを変更するときにプロジェクト全体をリファクタリングすることは避けたいと考えています。
質問:
自動ナビゲーション (多対多) アクセサーの両方を残す方法はありますが、関係エンティティにも直接アクセスできますか?
リレーションシップ テーブルから選択する独自のアクセサーを作成することもできますが、それらはもはや存在しないためEntityCollections
、追跡などの内部で発生する魔法が失われるのではないかと心配しています。
EntityCollections
エンティティに手動で追加できますか?
期待:
元は:Product* <-> *Offer
- 製品には多くのオファーがあります (50% オフ、BOGO など)
- 同じオファーが多くの製品に適用される可能性があります (「赤シャツ」と「青パンツ」は BOGO です)
希望: Product* <-[sort]-> *Offer
- 製品のオファーをリストするとき、それらを個別に並べ替えることができます
- たとえば、「赤いシャツ」には「50% オフ」の後に「BOGO」が表示されますが、「ブルー パンツ」には「BOGO」の次に「50% オフ」が表示されます。
それから私はできるようにしたいと思います:
// original access, do stuff
List<Offer> applicableOffers = currentProduct.Offers.Where(...);
// hit up the join table directly for properties
var applicableOffersInOrder = applicableOffers.OrderBy(o => o.ProductOffers.Sort);
それよりも
var applicableOffersInOrder = currentProduct.ProductOffers
.OrderBy(o => o.Sort)
.Offers.Where(...);