別個のテーブルにマップされたエンティティを使ってオブジェクト クエリを作成および実行する方法
Entity Data Model (EDM) でレガシ データを使用するとき、単一のエンティティをデータベース内の 2 つのテーブルにマップできると便利な場合があります。これは、SQL Server 2005 に付属する AdventureWorks サンプル データベースの Customer テーブルと Store テーブルのように、2 つのテーブルが共通のキーを共有している場合に実現できます。
このトピックで例として挙げたコードでは、「2 つのテーブルにマップされた単一のエンティティでモデルを定義する方法」で定義した EDM を使用しています。2 つのテーブルにマップされたエンティティに対してオブジェクト クエリを実行することは、他のエンティティを照会することと同じです。マッピングはコードの構文に影響しません。
別個のテーブルにマップされたエンティティを使用してプロジェクトを作成するには
コンソール アプリケーションを作成します。
「2 つのテーブルにマップされた単一のエンティティでモデルを定義する方法」で定義した EDM への参照を追加します。
System.Data.Entity および System.Runtime.Serialization の参照を追加します。
「2 つのテーブルにマップされた単一のエンティティでモデルを定義する方法」で実装した AdventureWorksModel のプリプロセッサ ディレクティブを追加します。
例
この例の別個のテーブルにマップされたエンティティを使用すると、foreach ループを使って結果を列挙できます。次のコードを実行すると、Store エンティティ マッピングの両方のテーブルからのプロパティが表示されます。
Option Explicit On
Option Strict On
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports StoreCustomer_VB.AdventureWorksModel
Module Module1
Sub Main()
Using objCtx As AdventureWorksEntities =
New AdventureWorksEntities()
For Each store As Store In objCtx.Store
Console.WriteLine("CustomerId: {0} Name: {1} " & vbNewLine _
& vbTab & "Account#: {2} SalespersonId: {3}", _
store.CustomerID, store.Name, store.AccountNumber, store.SalesPersonID)
Console.Write(vbNewLine)
Next
End Using
End Sub
End Module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdventureWorksModel;
namespace ClientStoreCustomerSplit
{
class Program
{
static void Main(string[] args)
{
using (AdventureWorksEntities objCtx = new AdventureWorksEntities())
{
foreach (Store store in objCtx.Store)
Console.WriteLine("CustomerId: {0} Name: {1} \r\n\t" +
"Account#: {2} SalespersonId: {3}",
store.CustomerID, store.Name,
store.AccountNumber, store.SalesPersonID );
}
}
}
}