时间过得很快转眼间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