2011-11-11 5 views
0

私はコメントと質問があります。 Entity Framework 4.0では、NorthwindのOrder_Detailsという2つの列(プライマリキーのみ)を使用すると、OrderとProductsの間のリンクテーブルなど、2つのテーブル間の多対多の関係にリンクテーブルが表示されませんリンクテーブルには、よくあるように、したがって、Northwindでは、Order-Product間のOrder_DetailsリンクテーブルでOrderIDとProductIDの両方を主キーとして使用する場合、多対多の関係では、これらの2つの列(主キー)のみが存在する場合、リンクテーブルは表示されませんOrder_DetailsでEF 4.0の多対多のリンクテーブルが不足しているか、機能がありませんか?

結果として、Entity Framework 4.0はリンクテーブルOrder_Detailsを表示せず、Intellisenseがこのリンクテーブルに多対多リレーションシップを表示するため、多対多リレーションシップリンクテーブルに挿入または作成できません。 EF 4に隠しリンクテーブルが表示されない場合、どのようにリンクテーブルの挿入または更新を行うのですか? 「あなたは今OOPで思考を始める必要があります」などの議論は私には印象的ではありません。 SQLは特定の構造を持ち、OOPはそのためのインターフェイスに過ぎないので、不器用なSQLクエリIMOではなくLINQ-to-entitiesを使用できます。

このバグを回避するためのヒントは、Silverlightの場合はhttp://forums.silverlight.net/t/159414.aspx/1です。これはWebサービスや他の.NETソリューションでも機能します。リンクテーブルに任意のタイプのダミー列を追加するだけです。

元の.edmxファイルを削除し、実際のデータベースに対して生成して新しい.edmxファイルを再構築します。

次に、intellisenseがリンクテーブルを表示し、Insert/Createと他の通常の操作を実行できます。例えば

、EF 4.0のインテリセンスは現在、リンクテーブルORDER_DETAILSが表示され、作成または(部分断片、省略するのtry/catchし、任意のロールバックオプション)などを挿入することができます。

  using (aDBEntity context = new aDBEntity()) 
       Order_Details newOrdDetails = new Order_Details(); 
     newOrdDetails.OrderID = //some number here 
     newOrdDetails.ProductID = //some number here 

       context.AddToOrder_Details(newOrdDetails); 
       context.SaveChanges(); 

質問:この多対多のリンクテーブルがEF 4.0のバグや機能を示していないのはなぜですか?

+0

もちろん、機能! –

答えて

3

個人的には、2つのキー以外の追加の列がない場合、リンクテーブルは必要ありません。私はM2M関係を定義するために使用されているリンクテーブルにアクセスする必要は一度もありません。 FooBarとの関係を追加してFoo(またはBar)を最初に取得し、Foo.Bars.Add(sampleBar)を使用してリラックスした気分になります。

私はあなたの質問に答えたと思います。あなたがOOPと思うなら、これは機能です。あなたがリンクテーブルにアクセスしたいと思うなら(そしてあなたが正しい方法でやっていると思う)、これは機能の欠如です。

関連する問題