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 | |
| ESQL | Entity 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
|
| 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对象。 |
| LINQ to Entities |
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> 方式的数据访问
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);
}

浙公网安备 33010602011771号