日期:2014-05-20  浏览次数:21216 次

ADO.NET Entity Framework学习笔记(1)介绍

LINQ to Entities

一种 LINQ 技术,使开发人员可以使用 LINQ 表达式和 LINQ 标准查询运算符,针对实体数据模型 (EDM) 对象上下文创建灵活的强类型化查询。

ESQL

Entity SQL

一种与 SQL 类似的、独立于存储的语言。该语言直接操作概念实体架构,并支持实体数据模型功能,如继承和关系。

EF

实体框架 ADO.NET Entity Framework

一套支持面向数据的软件应用程序开发的技术,可让开发人员使用映射到数据源中的逻辑架构的概念模型。

EDM

实体数据模型 (Entity Data Model)

一个数据模型,用于将应用程序数据定义为公共语言运行时类型和存储结构可以映射到的实体和关系集。

Entity

实体

ADO.NET Entity Framework 应用程序域中的一个概念,数据类型在该域中定义

csdl

概念架构定义语言 Conceptual schema definition language

一种基于 XML 的语言,可用于定义概念模型的实体类型、关联、实体容器、实体集和关联集

ssdl

存储架构定义语言 Store schema definition language

一种基于 XML 的语言,用于定义存储模型的实体类型、关联、实体容器、实体集和关联集,经常对应于数据库架构。

msl

映射规范语言 Mapping specification language

一种基于 XML 的语言,可用于将概念模型中定义的项映射到存储模型中的项

?

ADO.NET Entity Framework

架构

ADO.NET Entity Framework分Storage Provider ,Mapping Layer ,Object Services,LINQ to Entities 四层。

Storage Provider

负责直接和数据源通讯,支持的数据库 Sql Server

Mapping Layer

数据库概念层和逻辑层的映射。

通过 EDM 模型和 mapping provider ,应用程序将构建在更高层次的 EDM 模型抽象层次上。同时,在应用程序中将不再使用本地数据库的查询语言比如( T-sql), 取而代之的将是 Entity SQL

Object Services

Object Services 的目标是消除数据和应用程序代码风格的不匹配

ADO.NET 允许将查询结果呈现为行和列记录,同时也可以呈现为 .NET 对象。

该层还包括了更多被 O/R mapping 框架支持的高级的服务,比如身份认证,跟踪对象状态变化,并行性检查以及处理更新。

LINQ to Entities

Entity Framework LINQ 项目集成,以提供面向对象编程语言适合自己特点的查询功能。

LINQ to Entities 这一层依赖于 object services mapping layer 这两层。

说明

ADO.NET Entity Framework 的数据访问方式与ADO.NET 有类似之处

ADO.NET

ADO.NET Entity Framework

SqlConnection

EntityConnection

SqlCommand

EntityCommand

SqlDataReader.

EntityDataReader

SqlDataAdapter

ObjectContext

DataSet

ObjectQuery<T>

Entity

csdl,ssdl,msl

注意:ADO.NET与????ADO.NET Entity Framework是不同的技术,这个对比只是一个帮助理解的比效

EntityConnection

EntityCommand

通过EntityDataReader 方式的数据访问

string econString = @"

metadata=res://*/myModel.csdl

|res://*/myModel.ssdl

|res://*/myModel.msl

;

provider=System.Data.SqlClient;

provider connection string=""

Data Source=.;

Initial Catalog=LingTestDB;

Integrated Security=True;

MultipleActiveResultSets=True;

""

" ;

EntityConnection econ = new EntityConnection ();

econ.ConnectionString = econString;

EntityCommand ecmd = new EntityCommand ();

ecmd.CommandType = CommandType .Text;

ecmd.Connection = econ;

ecmd.CommandText = "select it.ItemID,it.ItemMatter from myContext.DBItem as it" ; //esql

//或

// cmd.CommandText = "select value it from myContext.DBItem as it"; //esql

// to SQL : "select * from DBItem"

econ.Open();

EntityDataReader eReader = ecmd.ExecuteReader(CommandBehavior .SequentialAccess);

while (eReader.Read())

{

Console .WriteLine("{0},{1}" , eReader[0].ToString(), eReader[1].ToString());

}

通过ObjectContext返回ObjectQuery<T> 方式的数据访问

ObjectContext提供了管理数据的功能

string econString = @"

metadata=res://*/myModel.csdl

|res://*/myModel.ssdl

|res://*/myModel.msl

;

provider=System.Data.SqlClient;

provider connection string=""

Data Source=.;

Initial Catalog=LingTestDB;

Integrated Security=True;

MultipleActiveResultSets=True;

""

" ;

EntityConnection econ = new EntityConnection (econString);

ObjectContext context = new ObjectContext (econ);

context.DefaultContainerName = "myContext" ;

ObjectQuery <DBItem > queryTab = context.CreateQuery<DBItem >("DBItem" );

foreach (var r in queryTab)

{

System.Console .WriteLine("{0},{1}" , r.ItemID, r.ItemMatter);

}

string econString = @"

metadata=res://*/myModel.csdl

|res://*/myModel.ssdl

|res://*/myModel.msl

;

provider=System.Data.SqlClient;

provider connection string=""

Data Source=.;

Initial Catalog=LingTestDB;

Integrated Security=True;

MultipleActiveResultSets=True;

""

" ;

EntityConnection econ = new EntityConnection (econString);

ObjectContext context = new ObjectContext (econ);

ObjectQuery <DBItem > queryTab = context.CreateQuery<DBItem >("select value it from myContext.DBItem as it where it.ItemID='a'" );

foreach (var r in queryTab)

{

System.Console .WriteLine("{0},{1}" ,r.ItemID,r.ItemMatter);

}