TOPシステム開発> 第5回:ADO.NET Entity FrameworkにおけるObjectServicesの使用 (1/3)

次世代データアクセステクノロジー」

次世代データアクセステクノロジー

第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との連携の例をみていこう。 次のページ


1   2  3  次のページ


マイクロソフト株式会社 小高 太郎
著者プロフィール
マイクロソフト株式会社  小高 太郎
ERP パッケージ開発に携わり、プログラマーからスタート。Microsoft Universityの講師を兼務、その後、SE、PM、管理職の道に進むも、縁あって2007年3月よりデベロッパー エバンジェリストに転身、現在は開発者向けに様々な技術訴求を行うべく活動中。


INDEX
第5回:ADO.NET Entity FrameworkにおけるObjectServicesの使用
Object Servicesとは?
  ObjectServicesにおけるEntity SQL、LINQの使用
  複数のテーブルへマッピングした際のEntity Data Model