ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架,它使开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据。实体框架Entity Framework使用概念层、映射层和逻辑层将逻辑数据库结构抽象化。
ADO.NET Entity Framework是建立在关系数据库上的一种抽象概念模型(Conceptual Model)框架。
术语说明:
实体框架的核心位于其模型中。实体框架支持表示数据库中的关系架构的逻辑存储模型。关系数据库通常存储数据的方式与应用程序使用数据的方式不同。通常,这会迫使开发人员按照数据库包含数据的结构检索数据。因此,开发人员通常将数据加载到更适合处理业务规则的业务实体中。在本示例中,以逻辑模型表示关系数据库的构架,业务实体表示概念模型。实体框架使用映射层在模型之间搭建了桥梁。因此,实体框架的模型中有三个处于活动状态的层:
概念层(Conceptual layer) - 表示数据的概念模型,包括实体和相互关系
逻辑层(Logical layer)- 描述数据在数据库的存储模型。
映射层(Mapping layer) - 在概念层和逻辑层模型之间建立映射。
这三层允许将数据从关系数据库映射到更加面向对象的业务模型。实体框架提供了使用 XML 文件定义这些层的方法。它还基于概念模型的架构生成了一系列类。可以针对这些类进行编程以直接与数据交互。这提供了抽象级别,因此开发人员可以针对概念模型而不是关系模型进行编程。
LINQ to Entities 查询使用对象服务基础结构。ObjectContext 类是作为 CLR 对象与 实体数据模型 进行交互的主要类。
Feature |
LINQ to SQL |
LINQ to Entities |
Language Extensions Support |
Y |
Y |
Language Integrated Database Queries |
Y |
Y |
Many-to-Many (3way Join/Payload relationship) |
N |
N |
Many-to-Many (No payload) |
N |
Y |
Stored Procedures |
Y |
N (to be added) |
Entity Inheritance |
N |
Y |
Single Entity From Multiple Tables |
N |
Y |
Identity Management / CRUD features |
Y |
Y |
LINQ to SQL适用之场景
注意,跟外面的一些传说相反,LINQ to SQL是支持对象继承的,虽然只支持常见的三种继承模式中的一种,LINQ to SQL也支持使用外部映射文件。
LINQ to Entities主要的应用场景针对的是需要非常灵活和更复杂的映射的场景,特别是在企业应用方面,而且需要访问其他的数据库系统。在这些场景中,数据表的结构与对象模型也许差别很大,而且应用开发人员往往并不拥有生成或修改数据库数据定义的权利。
LINQ to Entities适用之场景
原文参照链接:http://blog.joycode.com/saucer/archive/2008/02/09/114500.aspx
System.Data.Objects 命名空间包含一些类,用于提供对对象服务的核心功能的访问。这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询、插入、更新和删除数据。对象服务支持针对实体数据模型 (EDM) 中定义的类型进行的语言集成查询 (LINQ) 和实体 SQL 查询。对象服务将返回的数据具体化为对象,并将对象更改传播回数据源。它还提供了用于跟踪更改、将对象绑定到控件以及处理并发问题的功能。
类 |
说明 |
|
& |
表示一个缓存的 LINQ to Entities 查询。 |
|
& |
提供对对象数据的当前值的访问。 |
|
提供对对象数据的原始值的访问。DbUpdatableDataRecord 实现可用于更新对象的原始值的方法。 |
||
提供在 LINQ to Entities 查询中,公开概念模型规范函数的公共语言运行时 (CLR) 方法。有关规范函数的信息,请参见Canonical Functions (Entity SQL)。 |
||
& |
提供用于查询和使用对象形式的实体数据的功能。 |
|
定义影响 ObjectContext 的行为的选项。 |
||
包含 ObjectMaterialized 事件的数据。 |
||
& |
表示传递给对象查询的查询参数。 |
|
将查询参数表示为 ObjectQuery<T> 中定义的 ObjectParameter 对象。 |
||
& |
实现使用 LINQ to Entities 和 ObjectQuery<T> 对概念模型执行查询的通用功能。 |
|
& |
表示在给定的对象上下文中针对概念模型的类型化查询。 |
|
& |
表示针对概念模型的对象查询的结果的基类。 |
|
& |
以对象的可枚举集合形式表示 ObjectQuery<T> 的结果。 |
|
表示用于执行创建、读取、更新和删除操作的类型化实体集。 |
||
& |
维护对象和关系的状态和键信息以及对象属性的更改跟踪。 |
|
& |
维护实体类型实例和关系实例的对象状态和标识管理。 |
|
提供对对象数据的原始值的访问。 |
||
此类可帮助将为持久性未知数据类创建的代理类型解析为持久性未知对象的实际类型。 |
参照链接:http://msdn.microsoft.com/zh-cn/library/bb358246.aspx
System.Data.Objects.DataClasses 命名空间包含以下这些类:实体数据模型 (EDM) 中定义的类型的基类、由导航属性返回的类型的基类以及用于定义将公共语言运行时 (CLR) 对象映射到概念性模型中的类型的特性的类。
例:EDM 框架模型生成的.cs 代码
参照链接:http://msdn.microsoft.com/zh-cn/library/system.data.objects.dataclasses.aspx
原文参照链接:http://msdn.microsoft.com/zh-cn/downloads/ee959227.aspx
http://space.itpub.net/?uid-12639172-action-viewspace-itemid-665514
同linq connection 链接oracle 数据库一样
参照链接:http://www.devart.com/dotconnect/entityframework.html
Entity Framework Query Samples
http://www.devart.com/dotconnect/efquerysamples.html
EF对存储过程的支持并不完善。存在以下问题:
EF不支持存储过程返回多表联合查询的结果集。
EF仅支持返回返回某个表的全部字段,以便转换成对应的实体。无法支持返回部分字段的情况。
虽然可以正常导入返回标量值的存储过程,但是却没有为我们自动生成相应的实体.cs代码,我们还是无法在代码中直接调用或使用标量存储过程
EF不能直接支持存储过程中Output类型的参数。
其他一些问题
注意:在执行查询,插入,更新和删除的存储过程时,查询和插入,更新和删除用法不同,在调用时需显示调用