ADO.NET Entity Framework Beta 2
Visual Studio 2008 Beta 2 向けの ADO.NET Entity Framework Runtime である "ADO.NET Entity Framework Beta 2" と Visual Stdio 2008 Beta 2 向けの拡張機能 "ADO.Net Entity Framework Tools Aug 07 Community Technology Preview" がダウンロード可能となり、ADO.NET EF が盛り上がっています。
ダウンロード先やインストールについては、こだかさんの投稿にお任せするとして、既存のデータベースから概念モデルを作成し、概念モデルに対する操作を行ってみます。
SQL Server のサンプル DB である、Northwind データベースを利用しています。
[参照]
using (NorthwindEntities nwentities = new NorthwindEntities())
{
var results = from c in nwentities.Customers
where c.City == "London"
select c;
foreach (var c in results)
{
Console.WriteLine("CompanyName={0}, Address={1}", c.CompanyName, c.Address);
}
}
[データの追加]
using (NorthwindEntities nwentities = new NorthwindEntities())
{
Customers c = new Customers();
c.Address = "東京都渋谷区代々木";
c.City = "Tokyo";
c.CustomerID = "#MSKK";
c.CompanyName = "MSKK";
c.ContactName = "佐藤 直樹";
nwentities.AddObject("Customers", c);
nwentities.SaveChanges();
}
Beta 1 では、AddObject は引数が1つでしたが、Beta 2 よりはエンティティ名と追加するオブジェクトの2つを必要とします。
nwentities.AddObject(c); // <Beta 1 まで>
nwentities.AddObject("Customers", c); // <Beta 2 での記述>
また、SaveChanges() メソッドを呼び出すまで、変更点は永続化されません。
たとえば、 DeleteObject() による削除、オブジェクトに対する更新を行ってもマッピングされている DB に対して変更処理は実行されません。
using (NorthwindEntities nwentities = new NorthwindEntities())
{
var results = from c in nwentities.Customers
where c.City == "Tokyo"
select c;
foreach (var c in results)
{
Console.WriteLine("CompanyName={0}, Address={1}", c.CompanyName, c.Address);
c.CompanyName = "マイクロソフト株式会社";
}
// nwentities.SaveChanges();
}
この nwentities.SaveChanges() 行がコメントアウトされていますので、CompanyName を変更しているのですが、DB には反映されてません。
[その他]
デザイン時は、概念モデル、論理モデル、マッピングは1つの .edmx ファイルになっていますが、コードをビルドすると .csdl, .ssdl, .msl の3つのファイルが実行ファイルと同時に生成されていることが分かります。(既定の bin\Debug フォルダを見てください)
また、構成ファイル App.conifg の以下の3つの要素がエンティティを指し示すポイントとなります。
metadata : 概念モデル、論理モデル、マッピング
provider : 接続を行うプロバイダー
provider connection string : プロバイダーが利用する接続文字列
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="NorthwindEntities" connectionString="metadata=.\NorthwindModel.csdl|.\NorthwindModel.ssdl|.\NorthwindModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\sqlexpress;Initial Catalog=Northwind;Integrated Security=True""
providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
※ 本サンプルでは Northwind サンプルデータベースを利用しています。以下のリンクよりダウンロードして下さい。