第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
次世代データアクセステクノロジー
第1回 LINQとADO.NET Entity Framework
第2回 LINQによるデータアクセス実装
第3回 さまざまなデータソースへのアクセス
第4回 ADO.NET Entity Frameworkによるデータアクセス実装方法
第5回 ADO.NET Entity FrameworkにおけるObjectServicesの使用

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored