您的位置:首页 > 其它

ADO.NET Entity Framework 基本概述

2010-03-07 14:22 621 查看
时间过得很快转眼间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

/article/4812848.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: