ADO.NET Entity Framework(1)介绍
1 概念 1
2 ADO.NET Entity Framework 2
2.1 架构 2
2.2 说明 2
2.3 EntityConnection 4
2.4 EntityCommand 5
2.5 通过EntityDataReader 方式的数据访问 6
2.6 通过ObjectContext返回ObjectQuery<T> 方式的数据访问 9
概念
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);
}