12.3 Entity SQL
对于在实体框架中查询概念模型,除了可以使用LINQ to Entities之外,还可以使用Entity SQL。我们知道,概念模型将数据表示为实体和关系,而Entity SQL它允许以那些用过SQL的人熟悉的格式查询这些实体和关系,它的语法结构与一般的SQL的语句非常相似。如下面的示例所示:
protected void Page_Load(object sender, EventArgs e)
{
string sql=@"select value top(4)Employee from Employee";
using(DataConnectString employeeContext=
new DataConnectString())
{
ObjectQuery<Employee>query=
new ObjectQuery<Employee>((sl, employeeContext);
foreach(Employeeiin
query.Execute(MergeOption.AppendOnly))
{
Response.Write(i.employeeid+"  "
+i.employeename+"  "
+i.address+"  "
+i.email+"<hr/>");
}
}
}
示例运行结果如图12-14所示。
图 12-14 聚合示例运行结果
ADO. NET实体框架使用存储特定的数据提供程序,将一般Entity SQL转换为存储特定的查询。EntityClient提供程序提供一种方式,用于针对实体模型执行Entity SQL命令并返回包括标量结果、结果集和对象图在内的丰富类型数据。在构造EntityCommand对象时,可以指定一个存储过程名称或者通过将Entity SQL查询字符串分配该对象的EntityCommandCommandText属性来指定查询文本。EntityDataReader公开对EDM执行EntityCommand的结果。若要执行返回EntityDataReader的命令,可以调用ExecuteReader。
除了EntityClient提供程序之外,实体框架还允许使用Entity SQL对概念模型执行查询,并以强类型CLR对象的形式返回数据,这些对象是实体类型的实例。
需要说明的是,鉴于篇幅与本书的内容安排原因,详细的Entity SQL语法知识这里就不做详细的阐述,有兴趣的读者可以参考MSDN或者其他资料进行学习。