Multiple-Entity-Sets-per-Type を使用してオブジェクト クエリを作成および実行する方法 (Entity Framework)
Multiple-Entity-Sets-per-Type (MEST) の実装により、アプリケーションは、ストレージ内で使用されている別個のパーティションから同じ型のデータにアクセスできます。このセクションのコードは、オブジェクト コンテキストによって提供されるクエリ <T> から返される 2 つの別個のコレクション内にある単独の Customer 型へのアクセスを示します。このトピックのコードは、トピック「Multiple-Entity-Sets-per-Type でモデルを定義する方法 (Entity Framework)」で設計されたデータ モデルを使用します。
Multiple-Entity-Sets-per-Type を使用してプロジェクトおよびアプリケーションを構成するには
コンソール アプリケーション プロジェクトを作成し、System.Data.Entity および System.Runtime.Serialization への参照を追加します。
トピック「Multiple-Entity-Sets-per-Type でモデルを定義する方法 (Entity Framework)」で定義されたデータ モデルからビルドされた DLL への参照を追加します。
トピック「Multiple-Entity-Sets-per-Type でモデルを定義する方法 (Entity Framework)」のスキーマを実行可能ファイルと同じフォルダに追加します。
アプリケーション構成ファイルを追加します。次の構文は、スキーマ メタデータへのパスと、データをホストしているサーバーへの接続文字列を指定します。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="RegionalCustomersEntities"
connectionString="metadata=.;
provider=System.Data.SqlClient;
provider connection string="
Data Source=serverName;
Initial Catalog=RegionalCustomersMEST;
Integrated Security=True;
multipleactiveresultsets=true""
providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
例
次のサンプル コードでは、Multiple-Entity-Sets-per-Type を使用しています。このコードは、プロジェクトの Program ファイルで使用します。
Customer 型は、次の例の CustomersEast クエリと CustomersWest クエリの両方からアクセスされます。
顧客と注文の間のアソシエーションは、アソシエーションの OrderEast End または OrderWest End、または Customer End からナビゲートできます。
Option Explicit On
Option Strict On
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports RegionalCustomersModel
Module Module1
Sub Main()
Try
Using objCtx As RegionalCustomersEntities = _
New RegionalCustomersEntities()
Console.WriteLine("Number of Customers East: " & _
objCtx.CustomersEast.Count().ToString())
For Each customer As Customer In objCtx.CustomersEast
Console.WriteLine(customer.Name)
customer.OrdersEast.Load()
Dim totalOrderAmts As Decimal = 0
For Each order As OrderEast In customer.OrdersEast
Console.WriteLine( _
"Order: {0} Total: {1} Tax: {2}", _
order.OrderId, order.OrderTotal, order.Tax)
totalOrderAmts = totalOrderAmts + order.OrderTotal
Next
Console.WriteLine("Check totals: {0} <=> {1}", _
totalOrderAmts.ToString(), _
customer.TotalPurchases.ToString())
Next
Console.WriteLine("Number of Customers West: " & _
objCtx.CustomersWest.Count().ToString())
'objCtx.CustomersWest.Count(Of Customer)().ToString())
For Each customer As Customer In objCtx.CustomersWest
Console.WriteLine(customer.Name)
Dim totalOrderAmts As Decimal = 0
customer.OrdersWest.Load()
For Each order As OrderWest In customer.OrdersWest
Console.WriteLine( _
"Order: {0} Total: {1} Tax: {2}", _
order.OrderId, order.OrderTotal, _
order.Tax)
totalOrderAmts = totalOrderAmts + order.OrderTotal
Next
Console.WriteLine("Check totals: {0} <=> {1}", _
totalOrderAmts.ToString(), _
customer.TotalPurchases.ToString())
Next
' Access Customer from Order.
For Each order As OrderEast In objCtx.OrdersEast
order.CustomerReference.Load()
Console.WriteLine("{0} Order Total: {1}", _
order.Customer.Name, order.OrderTotal.ToString())
Next
End Using
Catch ex As Exception
Console.WriteLine(ex.ToString())
End Try
End Sub
End Module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RegionalCustomersModel;
using System.Data.Objects;
namespace ClientRegionalCustomers
{
class Program
{
static void Main(string[] args)
{
try
{
using (RegionalCustomersEntities objCtx =
new RegionalCustomersEntities())
{
Console.WriteLine("Number of Customers East: " +
objCtx.CustomersEast.
Count<Customer>().ToString());
foreach (Customer customer in objCtx.CustomersEast)
{
Console.WriteLine(customer.Name);
customer.OrdersEast.Load();
decimal totalOrderAmts = 0;
foreach (OrderEast order in
customer.OrdersEast)
{
Console.WriteLine(
"Order: {0} Total: {1} Tax: {2}",
order.OrderId,
order.OrderTotal,
order.Tax);
totalOrderAmts =
totalOrderAmts + order.OrderTotal;
}
Console.WriteLine("Check totals: {0} <=> {1}",
totalOrderAmts.ToString(),
customer.TotalPurchases.ToString());
}
Console.WriteLine("Number of Customers West: " +
objCtx.CustomersWest.
Count<Customer>().ToString());
foreach (Customer customer in objCtx.CustomersWest)
{
Console.WriteLine(customer.Name);
decimal totalOrderAmts = 0;
customer.OrdersWest.Load();
foreach (OrderWest order in
customer.OrdersWest)
{
Console.WriteLine(
"Order: {0} Total: {1} Tax: {2}",
order.OrderId,
order.OrderTotal,
order.Tax);
totalOrderAmts = totalOrderAmts + order.OrderTotal;
}
Console.WriteLine("Check totals: {0} <=> {1}",
totalOrderAmts.ToString(),
customer.TotalPurchases.ToString());
}
// Access Customer from Order.
foreach (OrderEast order in objCtx.OrdersEast)
{
order.CustomerReference.Load();
Console.WriteLine("{0} Order Total: {1}",
order.Customer.Name,
order.OrderTotal.ToString() );
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
参照
処理手順
Multiple-Entity-Sets-per-Type でモデルを定義する方法 (Entity Framework)
オブジェクトを特定のエンティティ セットに追加する方法 (Entity Framework)