Freigeben über


【ADO.NET Entity Framework】Entity SQLでのクエリー

こんにちは、こだかです。

本日はADO.NET Entity Frameworkの中から、EntityDataModel(EDM)に対するクエリー言語であるEntitySQLについてご紹介したいと思います。

EDMにおける問い合わせは、大きく2つの手法が存在しています。
1.EntityClientを直接扱う方法
 ・・・EntitySQL
2.ObjectQueryから問い合わせをかける方法
 ・・・EntitySQL
 ・・・Query builder メソッド
 ・・・Linq to Entity

Entity SQLは、ADO.NET Entity Framework から提供される Entity Data Model (EDM)をサポートするSQLに似た言語です。
Entity SQLはTransact-SQLから派生しており、基本構造と構文はTransact-SQLに非常に似ています。
1の手法は、データはDbDataReaderオブジェクトとして取り扱う事になり、今までのデータアクセス手法に非常に似ている為、理解しやすいものになります。
例をご覧頂いた方が早いでしょう。この例はpubsデータベースを扱った物になります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.EntityClient;

namespace EF1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (EntityConnection cn = new EntityConnection("Name=pubsEntities"))
            {
                cn.Open();
                EntityCommand cmd = cn.CreateCommand();
                cmd.CommandText = "SELECT VALUE c FROM pubsEntities.employee AS c WHERE c.fname = @fname";
                string fname = "Maria";
                cmd.Parameters.AddWithValue("fname", fname);
                DbDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
                while (rdr.Read())
                    Console.WriteLine("[eSQL] employeeName :{0} - {1}", rdr["fname"], rdr["lname"]);
                rdr.Close();
                cn.Close();
            }
        }
    }
}

なお、RowのコレクションをDbDataReaderでダイレクトに取りたい場合は、SELECT VALUE を使用します。
直接 SELECT c としてしまうと、直接データ取得が出来なくなりますのでご注意下さい。
その場合は以下のような記述を書くことになります。
               cmd.CommandText = "SELECT  c FROM pubsEntities.employee AS c WHERE c.fname = @fname";
               string fname = "Maria";
               cmd.Parameters.AddWithValue("fname", fname);
               DbDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
               while (rdr.Read())
               {
                   IExtendedDataRecord xrec = (IExtendedDataRecord)rdr[0];
                   Console.WriteLine("[eSQL] employeeName :{0} - {1}", xrec["fname"], xrec["lname"]);
               }

こだかたろう

Comments

  • Anonymous
    September 18, 2007
    こんにちは、こだかです。 前回 に引き続きまして、EntityDataModel(EDM)に対するクエリーをご紹介します。 1.EntityClientを直接扱う方法 ・・・EntitySQL 2.ObjectQueryから問い合わせをかける方法

  • Anonymous
    September 18, 2007
    こんにちは、こだかです。 前回 に引き続きまして、EntityDataModel(EDM)に対するクエリーをご紹介します。 1.EntityClientを直接扱う方法 ・・・EntitySQL 2.ObjectQueryから問い合わせをかける方法

  • Anonymous
    September 24, 2007
    こんにちは、こだかです。 前回 に引き続きまして、EntityDataModel(EDM)に対するクエリーをご紹介します。 1.EntityClientを直接扱う方法 ・・・EntitySQL 2.ObjectQueryから問い合わせをかける方法