时间过得很快转眼间VS已经2010版了,在4月12日将会正式发布VS 2010

ADOEF 做为.Net 4.0 中被微软推荐的ORM框架,相比.Net 3.5 sp1 已经得到了进一步的增强,使用它我们可以针对我们的业务对象来编程和创建数据访问,而不是原来的数据库操作,极大的减少了代码的编写和程序的维护开支,使代码更简洁美观。

相比原始的开发模型ADOEF拥有诸多的优点:

1.ADOEF模型中可以详细的描述数据库中的表关系,并映射到模型当中来。

2.相比Linq to SQL ,ADOEF 可以支持更多的数据库,并提供了统一的模型。可以建立多个概念模型来映射同一个数据库

3.可以方便灵活的更新ADOEF与数据库的映射,应对数据库的变化

4.提供了更强大的语法检查和验证模型。

实体框架结构图

实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。在EF中的实体数据模型(EDM)它提供以下方式用于查询 EDM 并返回对象:

1. LINQ to Entities -- 提供语言集成查询 (LINQ) 支持用于查询在概念模型中定义的实体类型。

2. Entity SQL -- 与存储无关的 SQL 方言,直接使用概念模型中的实体并支持诸如继承和关系等 EDM 功能。

3. 查询生成器方法 --可以使用 LINQ 风格的查询方法构造 Entity SQL 查询。

 

模型的建立可以参考:ADO.NET Entity Framework 一个简单数据绑定例子

 

语法说明:

引用命名空间:

using System.Data.Objects;
using NorthwindModel; //EF模型
 首先我们查询所有的Customer,代码和Linq To SQL中的十分相似。
 using (NorthwindEntities ctx = new NorthwindEntities()) //建立edm
 {
     foreach (var customer in ctx.Customers) //获得实体集合
     {
         Console.WriteLine(customer.CustomerID);
     }
 }

Entity SQL Language 查询某个Customer,

Customer alfki = ctx.Customers.Where("it.CustomerID = 'ALFKI'").First();

"it.CustomerID = 'ALFKI'"     表示查询条件语句,该语句看着又像C#代码又像SQL,被成为Entity SQL Language。

Linq To Entities,需要引用System.Linq命名空间。

 
方法1 
Customer alfki = ctx.Customers.First<Customer>(it => it.CustomerID == "ALFKI");
 
方法2
 Customer alfki = (from c in ctx.Customers
                  where c.CustomerID == "ALFKIA"
                  select c).First();
 
在Entity Framework中进行一对多的查询很简单,如果建立了数据库关系,便可以直接使用。
但是值得注意的是Entity Framework默认是Lazy Load,即关联数据在需要的时候才加载。如果直接查询该Customer关联的orders,查询不到结果。
 
Customer alfki = ctx.Customers.First<Customer>(it => it.CustomerID == "ALFKI"); //获得客户 
foreach (var order in alfki.Orders) //遍历客户的订单
 {
     Console.WriteLine(order.OrderID);
 }

需要在使用orders之前调用 alfki.Orders.Load(), 再次运行便可以得到正确的结果。

 

参考文章:

http://msdn.microsoft.com/zh-cn/library/bb399572.aspx

http://www.cnblogs.com/blusehuang/archive/2007/10/10/920020.html

posted on 2010-03-07 14:22  冯瑞涛  阅读(939)  评论(0编辑  收藏  举报