新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > .Net开发 > Asp.net教程 > 正文:ADO.NET Entity Framework 学习(1)

ADO.NET Entity Framework 学习(1)

新客网 XKER.COM 2007-10-14 来源:博客园 紫色阴影 收藏本文

   前一段时间园子里有很多文章介绍分析了Linq To SQL,它可以说是一个简单实现的ORM,是微软针对数据和对象的阻抗不平衡的问题。C# 3.0推出一些新的特性,比如Extension Method, Lambda Expression, Anonymous Type,其实这些新特性都是用来为Linq服务。Linq To SQL将程序员从以往写大量的sql查询语句、取值、赋值中解放出来,在intellisense和编译上做了很多工作,使得这些查询能够在编译期进行检查。同时微软推出ADO.NET Entity Framework,即下一代的ADO.NET。它是比Linq To SQL更加强大的ORM,让开发人员只需要着眼于领域对象模型的开发,而不需要考虑它们是如何与关系数据库交互。

  本文由一个简单的例子进行介绍Entity Framework是如何使用的。在此之前,必须下载ADO.NET Entity Framework runtimetools,官方也提供了很多示例下载。下面正式开始ADO.NET Entity Framework之旅(开发工具VS 2008 beta,以Northiwind数据库为例)。

  首先建立一个Console project(要选择.NET Framework 3.5),然后点击Add New Item,看见ADO.NET Entity Data Model选项:

 image

然后会出现Wizard,选择数据库,选择表、视图、存储过程等,按照向导一步步来就可以了,在这里只选择Customers和Orders表。在Solution Explore视图里面点击Northwind.edmx,可以看到Entity的信息(看上去很像Linq To SQL的dbml设计视图),然后将它们改名为Customer和Order。

image

  现在我们就可以进行查询了,先引用命名空间:

using System.Data.Objects;
using NorthwindModel;
 首先我们查询所有的Customer,代码和Linq To SQL中的十分相似。
 using (NorthwindEntities ctx = new NorthwindEntities())
 {
     foreach (var customer in ctx.Customers)
     {
         Console.WriteLine(customer.CustomerID);
     }
 }

接着来查询某个Customer,

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

"it.CustomerID = 'ALFKI'"表示查询条件语句,该语句看着又像C#代码又像SQL,被成为Entity SQL Language,具体语法在帮助文档上有很详细的Reference。

这里也可以使用Linq进行查询(Linq To Entities),需要引用System.Linq命名空间,似乎Entity Framework不支持Single方法,会抛出异常。

 Customer alfki = ctx.Customers.First<Customer>(it => it.CustomerID == "ALFKI");
或者
 Customer alfki = (from c in ctx.Customers
                  where c.CustomerID == "ALFKIA"
                  select c).First();
在Entity Framework中进行一对多的查询很简单,但是值得注意的是Entity Framework默认是Lazy Load,即关联数据在需要的时候才加载。
在本例子中,如果直接查询该Customer关联的orders,查询不到结果。
 foreach (var order in alfki.Orders)
 {
     Console.WriteLine(order.OrderID);
 }
需要在使用orders之前调用 alfki.Orders.Load(), 再次运行便可以得到正确的结果。
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐