2011-01-12 5 views
1

SQL 2008で1対多の関係を持つ2つのテーブルがあります。最初のテーブル(BBD)LINQ to SQLとOR Designerを使用する危険なビジネス?

PK | BBDataID | int
      | Floor_Qty | tinyint
      | Construct_Year | char(4)
      | |など、など

は、すべての建物と第二(BBDCerts)

PKに共通のデータを記述するBBDCertsID | int
      | BBDataID | int
      |認定タイプ| varchar(20)
      |

は、特定の建物の認定資格のコレクションです。したがって、BBDの主キー(BBDataID)は、FK関係を介してBBDCertsの対応するフィールドにマッピングされるが、BBDCertsIDは第2のテーブルの主キーであり、BBDataIDはユニークではないためではない。

私の問題は、BBDテーブルの特定のレコードにアクセスするときに、OR生成データコンテキストを使用して、証明書のリストにアクセスできるようにしたいということです。

Dim vals = (From q in db.BBD 
      Where q.BBDataID = x 
      Select q.Floor_Qty, q.Construct_Year, q.BBDCerts).SingleOrDefault 

以降、このような特定の証明書にアクセスすることができる:例えば

vals.BBDCerts.Certification_Type.First 

、SQLテーブルがデザインサーフェイスにドロップされたときに作成した自動関連付けが生成されません。 EntityRefアソシエーションは、ドット表記法を使用して他のテーブルにアクセスするために必要です。したがって、ORデザイナを使用して、BBDCerts BBDataIDをプライマリキー(これは実際のデータベースには影響しません)にしてから、関連プロパティを手動で適切なOneToMany設定に変更する必要があります。

このソリューションにアプローチするより良い方法があるかもしれませんが、私の質問は安全です。私はテストの弾圧をしたし、正しい証明書は毎回参照または更新されます。率直に言えば、全部が私を緊張させる。

+0

これは私には正しいと思われますが、手動で関連付けを作成しなければならない理由はわかりません。通常、BBDCertsテーブルの外部キーはそれを生成するのに十分であり、vals.BBDCerts.First()を実行できるはずです。 – Tom

答えて

0

信頼の投票ありがとう、トム。私は夢中だったと思っていた。

明らかに、キー(意図しない)は、子テーブルの主キーです。私は子テーブルにプライマリキーを設定していませんでした。 BBDCertsIDのキーを追加(再追加?)し、データコンテキストを再構築しました。なぜ私のOR専用のPK宣言で動作していたのか分かりませんが、今や構成が意味を成し、手で触れる必要はありません。

関連する問題