[实体框架编程]第一章 ADO.NET实体框架简介(下)
2012-06-15 13:52
363 查看
接上篇
现在所有PersonalDetails的字段不再是Person的一部分。SalesPerson目前所做的在数据库里甚至是不可能的:它派生自Person,正如一个对象模型中的那样。
现在想象下你可以写一个类似这样的LINQ查询:
From p in People.OfType<SalesPerson> select p
与之而来的是你可以得到一些SalesPerson对象,所有的属性都定义在这个模型里面(参见图1-3)。
图[/b]1-3 SalesPerson[/b]对象[/b]
这点正是实体框架之所以能够把你从与数据库交互到如何把表格的数据转换成对象的痛快之中解救出来的关键所在。
.NET仅仅只是使用EDM的一个工具。SQL Server的下一版本也会在报表服务里使用EDM,很快你将会看到微软其它的程序里也会采用EDM的概念。事实上,总的来说从微软那里你会发现模型驱动的开发方式正变得越来越受到关注。
当使用实体框架时,你将实现一个实体框架特定的EDM。在实体框架里,EDM在设计时由一个单独的XML文件来表示,然后在运行时会被分成3个XML文件,其中仅有一个用来表示概念模型。另外两个提供实体框架与数据库交换使用的元数据。你能在第二章中看到更多有关此元数据的内容。
实体[/b]:[/b]业务类的蓝图[/b]
EDM所描述的项称为实体。那些由模型实体以及他们的实例化对象产生的类也常被称作实体,但更长见的是把它们称谓实体类或实体对象。这些产生的实体类不同于经典的业务类的地方是,它们具有属性却没有行为除了有些开启跟踪修改的一些方法以为。
图1-4显示了Person与图1-2所展示的SalesPerson类的类图,这个类图会自动生成。每个类都有个工厂方法(例如CreatePerson)以及用来通知实体框架属性更改的方法。
使用实体框架产生的类,你可以添加你自己的业务逻辑,把结果放入你自己的业务对象,甚至把你的业务对象连接到该EDM,替换所产生的类。但是根据定义,这些实体类仅仅描述的是他们的模式。
除了能够像图1-2那样在数据模型里使用继承机制重构这些实体以外,你还可以定义实体间的关系。图1-5在模型里增加了一个Customer的实体,它也是派生自Person以及一个Order实体。注意SalesPerson和Order之间的关系连接线,显示它们间的一对多关系。在Customer与Order之间也有一对多的关系。
使用这个版本的模型进行查询时,你无须再使用JOIN连接了。该模型提供了实体间的导航。
下面的LINQ to Entity查询检索订单信息以及相关的客户资料。为了获取此Customer的FirstName和LastName,只需使用Order的Customer导航属性。
From o in context.Orders
Select new {o.OrderID,o.OrderNumber,o.Customer.FirstName,o.Customer.LastName}
一旦那些数据库在内存中,你就可以通过每个对象以及它们的属性来访问,比如myOrder.Customer.LastName,就那么简单。
有了实体框架,你可以检索图表,意味着你可以返回图形化的数据,比如一个Customer附带全部的Order详情。
这是一些查询数据模型而不是直接访问数据库的主要几点好处。
现在所有PersonalDetails的字段不再是Person的一部分。SalesPerson目前所做的在数据库里甚至是不可能的:它派生自Person,正如一个对象模型中的那样。
现在想象下你可以写一个类似这样的LINQ查询:
From p in People.OfType<SalesPerson> select p
与之而来的是你可以得到一些SalesPerson对象,所有的属性都定义在这个模型里面(参见图1-3)。
图[/b]1-3 SalesPerson[/b]对象[/b]
这点正是实体框架之所以能够把你从与数据库交互到如何把表格的数据转换成对象的痛快之中解救出来的关键所在。
.NET仅仅只是使用EDM的一个工具。SQL Server的下一版本也会在报表服务里使用EDM,很快你将会看到微软其它的程序里也会采用EDM的概念。事实上,总的来说从微软那里你会发现模型驱动的开发方式正变得越来越受到关注。
当使用实体框架时,你将实现一个实体框架特定的EDM。在实体框架里,EDM在设计时由一个单独的XML文件来表示,然后在运行时会被分成3个XML文件,其中仅有一个用来表示概念模型。另外两个提供实体框架与数据库交换使用的元数据。你能在第二章中看到更多有关此元数据的内容。
实体[/b]:[/b]业务类的蓝图[/b]
EDM所描述的项称为实体。那些由模型实体以及他们的实例化对象产生的类也常被称作实体,但更长见的是把它们称谓实体类或实体对象。这些产生的实体类不同于经典的业务类的地方是,它们具有属性却没有行为除了有些开启跟踪修改的一些方法以为。
图1-4显示了Person与图1-2所展示的SalesPerson类的类图,这个类图会自动生成。每个类都有个工厂方法(例如CreatePerson)以及用来通知实体框架属性更改的方法。
使用实体框架产生的类,你可以添加你自己的业务逻辑,把结果放入你自己的业务对象,甚至把你的业务对象连接到该EDM,替换所产生的类。但是根据定义,这些实体类仅仅描述的是他们的模式。
除了能够像图1-2那样在数据模型里使用继承机制重构这些实体以外,你还可以定义实体间的关系。图1-5在模型里增加了一个Customer的实体,它也是派生自Person以及一个Order实体。注意SalesPerson和Order之间的关系连接线,显示它们间的一对多关系。在Customer与Order之间也有一对多的关系。
使用这个版本的模型进行查询时,你无须再使用JOIN连接了。该模型提供了实体间的导航。
下面的LINQ to Entity查询检索订单信息以及相关的客户资料。为了获取此Customer的FirstName和LastName,只需使用Order的Customer导航属性。
From o in context.Orders
Select new {o.OrderID,o.OrderNumber,o.Customer.FirstName,o.Customer.LastName}
一旦那些数据库在内存中,你就可以通过每个对象以及它们的属性来访问,比如myOrder.Customer.LastName,就那么简单。
有了实体框架,你可以检索图表,意味着你可以返回图形化的数据,比如一个Customer附带全部的Order详情。
这是一些查询数据模型而不是直接访问数据库的主要几点好处。
相关文章推荐
- [实体框架编程] 第一章 ADO.NET实体框架简介(中)
- [实体框架编程]第一章 ADO.NET实体框架简介(上)
- [实体框架编程] 第一章 ADO.NET实体框架简介(下)
- [实体框架编程] 第一章 ADO.NET实体框架简介(上)
- ADO.NET Entity Framework实体框架简介
- ADO.NET Entity Framework(实体框架)
- ADO.NET Entity Framework快速入门(实体框架)
- ADO.NET 实体框架 资料收集
- 一起谈.NET技术,详解ASP.NET MVC 2中的新ADO.NET实体框架
- ADO.NET Entity Framework查询实体和关联(实体框架快速入门)
- ADO.NET Entity Framework定义高级数据模型(实体框架任务)
- 好文转载:ADO.NET 实体框架概述
- ADO.net实体框架访问不到数据库最新数据问题
- 无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类
- ADO.NET实体框架连接串引发的异常:Unable to load the specified metadata resource
- 如何:使用 ADO.NET 实体框架数据源创建数据服务(WCF 数据服务)
- ADO.NET Entity Framework如何:使用存储过程定义模型(实体框架)
- ADO.NET Entity Framework 如何:自定义建模和映射文件以使用自定义对象(实体框架)
- ADO.NET Entity Framework插入和更新数据(实体框架快速入门)
- ADO.NET Entity Framework 自定义 AdventureWorks .edmx 文件(实体框架)