【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から問い合わせをかける方法