5

VisualStudioでエンティティフレームワークウィザードを使用してdb-modelを作成しました。テーブルstocktype2jobで相互に関連する2つのテーブル(job、stocktype)があります。

ここに画像の説明を入力してください

Job <------- no direct relation / navigation property --------> StockType
 |                                                                  |
 |                                                                  |
 ---------------------> StockType2Job ----------------------------->

ジョブオブジェクトを使用すると、次のようなことができます...

EntitiesObject db = new EntitiesObject();
Job job = db.Jobs.SingleOrDefault(j => j.IdJob == 40);

List<StockType> stockTypes = new List<StockType>;
foreach (StockType2Job st2j in job.StockType2Jobs)
    {
        stockTypes.add(st2j.StockType);
    }

それはうまくいくはずです。しかし、ジョブエンティティにナビゲーションプロパティを作成して、このようなものを記述できるようにする方法はありますか?

EntitiesObject db = new EntitiesObject();
Job job = db.Jobs.SingleOrDefault(j => j.IdJob == 40);

List<StockType> stockTypes = job.StockTypes; // <<-----

あなたの親切なヘルプアポをありがとう

4

2 に答える 2

2

StockTypeとJobへの外部キーだけが含まれていないことは(自己参照から)明らかStockType2Jobsであるため、ナビゲーションプロパティとの多数の関係をマップすることはできませんjob.StockTypesStockTypeしたがって、を介して収集する以外に何もできませんjob.StockType2Jobs。しかし、それは大したことではありません。

List<StockType> stockTypes = job.StockType2Jobs.Select(x => x.StockType);

これをマップされていないプロパティでラップしたくなるかもしれませんjob.StockTypesが、通常、これを行うのは良い考えではありません。

于 2012-12-14T12:55:25.687 に答える
1

次のようなものを試してください。

 var stocksTypes = from st in db.StockType 
     from stj in st.StockType2Job where stj.Job.IdJob==40 select st;
  • このコードは、新しいナビゲーションプロパティを作成するのではなく、テーブルを「結合」するだけです。StockType2Jobsテーブルが存在するのには正当な理由があると思います。

EFとのN対Nの関係に対処する方法を確認することをお勧めします。

いくつかのリンク[1] [2]

助けてくれることを願っています

于 2012-12-14T10:53:23.423 に答える