次世代データアクセステクノロジー
第5回:ADO.NET Entity FrameworkにおけるObjectServicesの使用
著者:マイクロソフト 小高 太郎
公開日:2008/1/29(火)
Object Servicesとは?
前回「ADO.NET Entity Frameworkによるデータアクセス実装方法」では、ADO.NET Entity Frameworkのテクノロジーについて解説した。また、ADO.NET Entity Frameworkには、Entity Data Modelとデータをやり取りする機能として「Entity Clientを使用する方法」を紹介した。今回はもう1つの手法である「Object Servicesを使用する方法」について解説する。
「Object Services」は内部的にEntity Clientを使用している。Entity Clientと異なるのは、エンティティの型に型付けされたオブジェクト(ObjectQuery)を返すことができる点である。そのため、型のあいまいさを起因とする問題(コンパイル時にエラーが検出できない点など)を解決することができる。
また、Object Servicesでは画面上のコントロールとのデータバインドを行うことも可能だ。リスト1に示すのが、Object Servicesを使用したデータバインドを行う例である。
publishersエンティティとtitlesエンティティは「1対多」の関係を持っている。リスト1のプログラムではpublishersを読み込む際に、同時に「Include("titles")」としてtitlesエンティティへのデータのロードを事前に行い、コンボボックスのSelectedIndexChangedイベントで選択されたpublishersに従ったtitlesをデータグリッドに表示するようになっている。
リスト1:Object Servicesを使用したコントロールバインドの例
public partial class Form1 : Form
{
private pubsEntities context;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
context = new pubsEntities();
ObjectQuery<publishers> query = context.publishers
.Where("it.country ='USA'")
.Include("titles");
this.comboBox1.DataSource = query;
this.comboBox1.DisplayMember = "pub_name";
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
publishers publisher = (publishers)this.comboBox1.SelectedItem;
dataGridView1.DataSource = publisher.titles;
}
}
リスト2:データの追加の例
static void Main(string[] args)
{
using (pubsEntities context = new pubsEntities())
{
jobs newJob = new jobs();
newJob.job_desc = "Test";
newJob.max_lvl = 10;
newJob.min_lvl = 10;
context.AddObject("jobs", newJob);
context.SaveChanges();
}
}
リスト3:データの更新の例
static void Main(string[] args)
{
using (pubsEntities context = new pubsEntities())
{
ObjectParameter param = new ObjectParameter("p", "Test");
jobs job = context.jobs.Where("it.job_desc = @p",param).Firsty<jobs>();
job.job_desc = job.job_desc + "_1";
context.SaveChanges();
}
}
リスト4:データの削除の例
static void Main(string[] args)
{
using (pubsEntities context = new pubsEntities())
{
ObjectParameter param = new ObjectParameter("p", "Test");
jobs job = context.jobs.Where("it.job_desc = @p",param).Firsty<jobs>();
context.DeleteObject(job);
context.SaveChanges();
}
}
データの追加、更新、削除
さらにObject Servicesは変更をトラッキングする事ができるため、データの追加(リスト2)、更新(リスト3)、削除(リスト4)が可能である。変更点を永続化するにはSaveChangesメソッドを実行する。
次にEntity SQLやLINQとの連携の例をみていこう。 次のページ