• 締切済み

VS2010 LINQtoSQLについて

お世話になります。 VisualStudio2010でASP.NET MVC C#で開発を行っております。 既存のSQLServerのデータベースに対してデータ抽出をするアプリケーションを作成しており、VS2010のテンプレートのLINQtoSQLクラスで自動作成されるコードについての質問です。 手順としては、VS2010で、「新しい項目の追加」→データの「LINQtoSQLクラス」を選択→サーバーエクスプローラーから2つのテーブルをドラッグ&ドロップ しました。 実現したいこととしては、この2つのテーブルに関連付けを設定し、データを参照したいのですが、関連付けを設定して、コードを記述しても参照できなく困っています。 関連付けを行いたいテーブルの状況です。 (1)テーブルA・・・関連付けさせたいカラム(int、Identity(True)、NULL許容(False)) (2)テーブルB・・・関連付けさせたいカラム(int、NULL許容(True)) (3)テーブルAとテーブルBは1対1の関係 VS2010で自動生成されるコードの状況 デザイナ上では、関連付けプロパティにPublicでプロパティが設定されているようになっているのですが、コード見ると下記のように中身がない状態です。 public 関連付けプロパティ名() { } 上記のプロパティが働けば、下記のコードで参照できると考えております。 DataContext _context = new DataContext(); A tableA = _context.B.Single(p => p.関連付けキー == 100); string productName = tableA.関連付けプロパティ名.productName; 参照したいデータのモデルを手作業で記述し、そのモデルをビューに渡せば良いと思うのですが、参照したいカラム数がとても多く、できれば自動生成されるコードで解決できればと思っています。 何か方法や設定があればご教示ください。 よろしくお願いします。

みんなの回答

  • shockatz
  • ベストアンサー率80% (153/191)
回答No.1

LINQ to SQLを使う場合、DataContext編集画面(LINQ to SQLクラス)で、サーバエクスプローラからテーブルをDrag&Dropしたあと、ツールバーの「関連付け」を使って、2つのテーブル間をPoint&DragToすれば、リレーションが設定されます。 また、SQL Serverのテーブル設計時点で、リレーションが設定ずみならば、最初から両方のテーブルを接合するリレーション・ステムが現れるはずです。 ご提示の条件の場合、リレーションは、デフォルトで 1 to Many の設定になっているため、ステムをクリックしてプロパティを表示し、そこで 1 to 1 に変更します。 また、相互の参照名もここで任意に変更できます。 テーブル名が規定通り(先頭大文字の複数形)であれば、エンティティクラス名も自動的に単数形で定義されるので、たとえば、 会員データ:Members(primary Key:ID unique/not Null) 会員詳細データ:Details(primary Key:ID unique/not NULL foreign key:Members.ID) であれば、 using(var dc = new HogeDataContext()){ var MemberName = dc.Members.Single(m => m.ID==比較値).Detail.MemberName; } で取得できます。 実際には、Members.Single(m => m.ID==比較値).Detail がnullの場合がありますので、もう少し作り込む必要がありますが。

すると、全ての回答が全文表示されます。

関連するQ&A