随笔 - 705  文章 - 0  评论 - 1103  阅读 - 138万 

时间过得很快转眼间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   冯瑞涛  阅读(941)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示