エンティティ フレームワーク アプリケーションの作成 (SQL Server Compact)
ここでは、SQL Server Compact データベースをデータ ソースとして使用するエンティティ フレームワーク アプリケーションの作成手順について説明します。
新しいエンティティ フレームワーク アプリケーションを作成するには
Visual Studio の [ファイル] メニューで、[新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] の一覧から、使用するプログラミング言語を展開し、[Visual C#] または [Visual Basic] を選択します。
[テンプレート] の一覧で、[コンソール アプリケーション] をクリックします。
プロジェクトの名前 (SQLCompactEDMProject など) と場所を指定し、[OK] をクリックします。
Northwind.sdf のエンティティ データ モデルを生成するには、%ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5\Samples フォルダからプロジェクトがあるフォルダに Northwind.sdf をコピーします。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[テンプレート] ペインで、[ADO.NET エンティティ データ モデル] を選択します。
モデル名として「Northwind.edmx」と入力し、[追加] をクリックします。
Entity Data Model ウィザードの最初のページが表示されます。
[モデルのコンテンツの選択] ダイアログ ボックスで、[データベースから生成] をクリックします。その後、[次へ] をクリックします。
[新しい接続] をクリックします。
[接続プロパティ] ダイアログ ボックスで、[データ ソース] の [変更] をクリックします。Microsoft SQL Server Compact 3.5 を選択して、Northwind.sdf を参照し、[OK] をクリックします。
[データ接続の選択] ダイアログ ボックスが、指定したデータベース接続設定を使用して更新されます。
[エンティティ接続設定に名前を付けて App.Config に保存] チェック ボックスがオンになっており、値が NorthwindEntities に設定されていることを確認します。その後、[次へ] をクリックします。
[データベース オブジェクトの選択] ダイアログ ボックスですべてのオブジェクトを消去した後、[テーブル] を展開し、テーブル オブジェクトとして Customers を選択します。
[モデル名前空間] に「NorthwindModel」と入力します。
[完了] をクリックしてウィザードを終了します。
ウィザードによって次の処理が行われます。
System.Data.Entity.dll、System.Runtime.Serialization.dll、System.Security.dll の各アセンブリに参照を追加します。
EDM を定義する Northwind.edmx ファイルを生成します。
EDM に基づいて生成されたクラスを含むソース コード ファイルを作成します。ソース コード ファイルを表示するには、ソリューション エクスプローラで .edmx ファイルを展開します。
App.Config ファイルを作成します。
プロジェクトのアプリケーション構成ファイル (app.config) をダブルクリックし、接続文字列に "provider=System.Data.SqlServerCe.3.5" とあることを確認します。
アプリケーションのコード ページに、以下の using ステートメントを追加します。
C#:
using NorthwindModel;
Visual Basic:
Imports SQLCompactEDM.NorthwindModel
モデルの名前は、Northwind.edmx ファイルに指定された名前空間の値に対応します。
次のコード例をコード ファイルにコピーします。その後、コンパイルして実行します。
重要
System.Data.Entity.dll アセンブリは、.NET Framework Version 3.5 の SP1 リリースの一部です。System.Data.Entity アセンブリのマネージ リファレンス トピックは、エンティティ フレームワーク ドキュメントにあります。
例
以下のコード例では、SQL Server Compact Northwind.sdf データベースに対する単純なエンティティ フレームワーク クエリを 3 つ紹介します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.EntityClient;
using System.Data;
using NorthwindModel;
namespace SQLCompactEDMProject
{
class SSC_EntityFrameworkExample
{
static void Main(string[] args)
{
Console.WriteLine(
"SQL Server Compact and Northwind Entity Framework Sample:");
try
{
// Establish a connection to the underlying data provider by
// using the connection string specified in the config file.
using (EntityConnection connection =
new EntityConnection("Name = NorthwindEntities"))
{
// Open the connection.
connection.Open();
// A simple query that demonstrates
// how to use Entity SQL for entities.
Console.WriteLine("\nEntity SQL Query:");
ESQL_Query(connection);
// A simple query that demonstrates
// how to use LINQ to Entities.
// A new connection is established by using the connection
// string in the App.Config file.
Console.WriteLine("\nLINQ To Entity Query:");
LINQ_To_Entity_Query();
// A simple query that demonstrates how to use ObjectContext
// on data objects with an existing connection.
Console.WriteLine("\nObject Query:");
ObjectQuery(connection);
// Close the connection.
connection.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
// A simple query that demonstrates how to use
// Entity SQL query for entities.
private static void ESQL_Query(EntityConnection entityConnection)
{
EntityCommand entityCommand = entityConnection.CreateCommand();
entityCommand.CommandText =
@"Select Cust.Customer_Id as Id from NorthwindEntities.Customers as Cust order by Cust.Customer_Id";
EntityDataReader entityDataReader =
entityCommand.ExecuteReader(CommandBehavior.SequentialAccess);
while (entityDataReader.Read())
{
for (int i = 0; i < entityDataReader.FieldCount; i++)
Console.Write(entityDataReader[i].ToString() + "\t");
Console.WriteLine();
}
}
// A simple LINQ query on the Customers entity set in the Northwind
// Context.
// The code example creates a new Northwind Context based on the
// settings provided in the App.Config File.
private static void LINQ_To_Entity_Query()
{
using (NorthwindEntities nwEntities = new NorthwindEntities())
{
IQueryable<string> customers =
from c in nwEntities.Customers select c.Company_Name;
foreach (String c in customers)
{
Console.WriteLine(c);
}
}
}
// The ObjectContext provides access to the collections of data used
// by applications.
// The following code shows how to open a connection to the
// ObjectContext named NorthwindEntities.
// With the application configuration file in scope the connection
// can be opened with one line of code:
// NorthwindEntities nwEntities = new NorthwindEntities(entityConnection).
private static void ObjectQuery(EntityConnection entityConnection)
{
using (NorthwindEntities nwEntities = new
NorthwindEntities(entityConnection))
{
foreach (Customers c in nwEntities.Customers)
{
Console.WriteLine(c.Company_Name);
}
}
}
}
}
Imports System.Data.EntityClient
Imports SQLCompactEDM.NorthwindModel
Module Module1
Sub Main()
Console.WriteLine("SQL Server Compact and Northwind Entity Framework Sample:")
Try
Using connection As EntityConnection = _
New EntityConnection("Name = NorthwindEntities")
' Open the connection.
connection.Open()
' A simple query that demonstrates how to use ESQL for entities.
Console.WriteLine(vbNewLine & "ESQL Query:")
ESQL_Query(connection)
' A simple query that demonstrates how to use LINQ to Entities.
' A new connection is established by using the
' connection string in the App.Config file.
Console.WriteLine(vbNewLine & "LINQ To Entity Query:")
LINQ_To_Entity_Query()
' A simple query that demonstrates how to use ObjectContext
' on data objects with an existing connection.
Console.WriteLine(vbNewLine & "Object Query:")
ObjectQuery(connection)
' Close the connection.
connection.Close()
End Using
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
' A simple query that demonstrates how to use ESQL for entities.
Private Sub ESQL_Query(ByVal entityConnection As EntityConnection)
Dim entityCommand As EntityCommand = entityConnection.CreateCommand
entityCommand.CommandText = _
"Select Cust.Customer_Id as Id from NorthwindEntities.Customers as Cust order by Cust.Customer_Id"
Dim entityDataReader As EntityDataReader = _
entityCommand.ExecuteReader(CommandBehavior.SequentialAccess)
Do While entityDataReader.Read
Dim i As Integer
For i = 0 To entityDataReader.FieldCount - 1
Console.Write((entityDataReader.Item(i).ToString & vbTab))
Next i
Console.WriteLine()
Loop
End Sub
' A simple LINQ query on the Customers entity set in the Northwind Context.
' The code example creates a new Northwind Context based on the
' settings provided in the App.Config File.
Private Sub LINQ_To_Entity_Query()
Using nwEntities As NorthwindEntities = New NorthwindEntities
Dim customers = From c In nwEntities.Customers Select c.Company_Name
For Each c In customers
Console.WriteLine(c)
Next
End Using
End Sub
' The ObjectContext provides access to the collections of data used by applications.
' The following code shows how to open a connection to the ObjectContext named NorthwindEntities.
' With the application configuration file in scope the connection can be opened with one line of code:
' NorthwindEntities nwEntities = new NorthwindEntities(entityConnection).
Private Sub ObjectQuery(ByVal entityConnection As EntityConnection)
Using nwEntities As NorthwindEntities = New NorthwindEntities(entityConnection)
Dim c As Customers
For Each c In nwEntities.Customers
Console.WriteLine(c.Company_Name)
Next
End Using
End Sub
End Module