電子書籍の厳選無料作品が豊富!

お世話になります。
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;

参照したいデータのモデルを手作業で記述し、そのモデルをビューに渡せば良いと思うのですが、参照したいカラム数がとても多く、できれば自動生成されるコードで解決できればと思っています。

何か方法や設定があればご教示ください。

よろしくお願いします。

A 回答 (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の場合がありますので、もう少し作り込む必要がありますが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!