Entity Data Model (EDM) 深入分析, Part 3

简介:
EntityClient
实体框架(Entity Framework)在ADO.NET 3.5 提供程序的基础上引入新的 ADO.NET 提供程序 EntityClient。Entity­Client 看上去与之前使用的 ADO.NET 提供程序非常类似,它将提供第一个抽象,可允许开发人员使用标准的 Connection、Command 和 DataReader 对象依照 EDM 执行查询。它还会将映射域模型所需的客户端视图引擎(根据 EDM 定义的)添加到底层关系数据库架构。必要时,EntityClient 可借助 ESQL 查询字符串让开发人员以行和列的形式处理实体,而不必生成类来表示概念架构。

本系列文章上一篇:
Entity Data Model (EDM) 深入分析, Part 1
Entity Data Model (EDM) 深入分析, Part 2
 
 
1. EntityCommand  查询返回实体类型
Entity SQL也可以通过EntityClient 来执行,尽管代码比较啰嗦,但是在某些情况下,也是优点。
1) 首先创建EntityConnection,重用Northwind data context 的连接字符串,并打开连接。
2) 创建 EntityCommand 对象,并传入Entity SQL语句和数据库连接对象。
3) 创建DbDataReader对象,并循环读取返回的结果集。
 
NorthwindEntities context = new NorthwindEntities();
 
EntityConnection conn = new EntityConnection(context.Connection.ConnectionString);
conn.Open();
 
var sql = "SELECT VALUE emp FROM NorthwindEntities.Employees AS emp";
EntityCommand cmd = new EntityCommand(sql, conn);
 
DbDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
while (reader.Read())
{
 Console.WriteLine("{0} {1} {2} {3}", reader["EmployeeID"], reader["LastName"],
    reader["FirstName"], reader["Country"]);
}
当时使用SequentialAccess的DbDataReader时,需要小心访问数据,务必有序的读取。
如你改变成员的顺序,将抛出InvalidOperationException 异常 - "Attempt to read from column ordinal '0' is not valid. With CommandBehavior.SequentialAccess, you may only read from column ordinal '2' or greater."
 
Console.WriteLine("{0} {1} {2} {3}", reader["LastName"], reader["EmployeeID"],
 reader["FirstName"], reader["Country"]);
 
2. EntityCommand  查询返回匿名类型
采用相同的技术可以实现返回匿名类型。
EntityConnection conn = new EntityConnection(context.Connection.ConnectionString);
conn.Open();
 
var sql = "SELECT emp.LastName, emp.FirstName " +
          "FROM NorthwindEntities.Employees AS emp";
EntityCommand cmd = new EntityCommand(sql, conn);
 
DbDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
while (reader.Read())
{
 Console.WriteLine("{0} {1}", reader["LastName"], reader["FirstName"]);
}
 
3. EntityCommand  带参数查询
EntityCommand 带参数也比较容易,在Entity SQL字符串中参数名称以@作为前缀,接着创建EntityParameter对象,并增加到EntityCommand 的Parameters集合内。
EntityConnection conn = new EntityConnection(context.Connection.ConnectionString);
conn.Open();
 
var sql = "SELECT VALUE emp FROM NorthwindEntities.Employees AS emp " +
          "WHERE emp.Country = @country";
EntityCommand cmd = new EntityCommand(sql, conn);
 
EntityParameter param = new EntityParameter("country", DbType.String);
 
param.Value = "USA";
cmd.Parameters.Add(param);
 
DbDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
while (reader.Read())
{
 Console.WriteLine("{0} {1} {2} {3}", reader["EmployeeID"], reader["LastName"],
    reader["FirstName"], reader["Country"]);
}
 
 
LINQ to Entities
LINQ是在.NET v3.5 引入的新技术。相对于前面的Entity SQL而言,我更偏爱LINQ to entities。LINQ查询虽然有一些局限,但是LINQ更容易、更自然,此外,还支持强类型,因此智能提示能帮助编写LINQ查询脚本。
 
LINQ to Entities 与LINQ to Objects和LINQ to SQL 基本一样,因此下面简单演示2个基本的LINQ to Entities的查询。
 
1. LINQ  带参数查询
NorthwindEntities context = new NorthwindEntities();
 
string country = "USA";
var query = from e in context.Employees
            where e.Country == country
            select e;
 
foreach (var emp in query)
 Console.WriteLine("{0} {1} {2} {3}", emp.EmployeeID, emp.FirstName, emp.LastName, emp.Country);
 
2. LINQ  查询返回匿名类型
NorthwindEntities context = new NorthwindEntities();
 
var query = from e in context.Employees
            select new { e.LastName, e.FirstName };
 
foreach (var emp in query)
 Console.WriteLine("{0} {1}", emp.LastName, emp.FirstName);
 
这篇文章对Entity Data Model 和Entity Framework 提供了各种查询技术进行了简单的介绍,希望对你有帮助。下一篇文章将介绍更高级的 Entity SQL 查询技术、查看SQL 语句、eager loading、变更跟踪、并发… 等等。

推荐Entity Framework  相关文章:
1. Entity Framework – Update Model From Database, Part 1
2. Entity Framework – Update Model From Database, Part 2
3. Entity Framework 架构简介
4. 比较LINQ to SQL Diagram 和Entity Data Model
 
英文链接:
1. ADO.NET Entity Framework & LINQ to Entities,









本文转自 entlib.com 51CTO博客,原文链接:http://blog.51cto.com/entlib/107942,如需转载请自行联系原作者
目录
相关文章
|
数据建模
SAP SEGW 里的 Entity Type 作用讲解
SAP SEGW 里的 Entity Type 作用讲解
144 0
SAP SEGW 里的 Entity Type 作用讲解
SAP MM ML81N为采购订单创建服务接收单,报错- No matching PO items selected -
SAP MM ML81N为采购订单创建服务接收单,报错- No matching PO items selected -
SAP MM ML81N为采购订单创建服务接收单,报错- No matching PO items selected -
|
JavaScript 前端开发
使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题
使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题
200 0
使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题
SAP Odata batch操作,只支持multipart_mixed类型的content-type
SAP Odata batch操作,只支持multipart_mixed类型的content-type
113 0
SAP Odata batch操作,只支持multipart_mixed类型的content-type
|
Java
Hybris DDIC type and its counterpart model class
Hybris DDIC type and its counterpart model class
110 0
Hybris DDIC type and its counterpart model class
|
JavaScript 前端开发
如何使用 ABAP 手动解析 multipart/form-data 格式的数据
如何使用 ABAP 手动解析 multipart/form-data 格式的数据
240 0
如何使用 ABAP 手动解析 multipart/form-data 格式的数据
|
JSON 数据格式
SAP UI5 json model load data的原理
Created by Wang, Jerry, last modified on Oct 19, 2015
128 0
SAP UI5 json model load data的原理
|
前端开发 数据库
统一数据模型(Universal Data Model)系列一
# 引言 > > 当我们开始一个新的业务应用设计开发呢,无论是前台应用还是中后台应用,在前后端分离的团队组织划分及协作时,前台应用专注于交互体验的提升,涉及到多端(PC,H5,iOS,Android,小程序 - 支付宝,淘宝,微信...),大量的创新在于如何同一个页面开发复用提效统一输出到各端,定义DSL,结合可视化搭建,no code/low code进行页面开发;同时应对各端所需求数据的
3965 1