前一段时间园子里有很多文章介绍分析了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 runtime 和tools,官方也提供了很多示例下载。下面正式开始ADO.NET Entity Framework之旅(开发工具VS 2008 beta,以Northiwind数据库为例)。

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

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

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

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.Customerswhere 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(), 再次运行便可以得到正确的结果。

[未完待续]
 

转载于:https://www.cnblogs.com/blusehuang/archive/2007/10/10/920020.html

ADO.NET Entity Framework 学习(1)相关推荐

  1. ADO.NET Entity Framework 学习

    前一段时间园子里有很多文章介绍分析了Linq To SQL,它可以说是一个简单实现的ORM,是微软针对数据和对象的阻抗不平衡的问题.C# 3.0推出一些新的特性,比如Extension Method, ...

  2. ADO.NET Entity Framework 学习(1) [ZT]

    前一段时间园子里有很多文章介绍分析了Linq To SQL,它可以说是一个简单实现的ORM,是微软针对数据和对象的阻抗不平衡的问题.C# 3.0推出一些新的特性,比如Extension Method, ...

  3. ADO.NET Entity Framework学习笔记(2)建模[转]

    模型结构 [概念模型]中要有[实体键], [实体键]要与表中的 [主键] 对应,也就是说表必须要有主键. 表中的[唯一键]不会在[概念模型]中体现 在[概念模型]中默认是不允许修改[实体键]的值的 联 ...

  4. ADO.NET Entity Framework学习笔记(4)ObjectQuery对象

    ObjectQuery<T>数据加载方式 1. ObjectQuery<T> 提供了一个管理[实体对像]集合 2. ObjectQuery<T>继承System.D ...

  5. EF架构~了解一下,ADO.NET Entity Framework

    回到目录 以下文章部分来自百度百科 背景 长久以来,程序设计师和数据库总是保持着一种微妙的关系,在商用应用程序中,数据库一定是不可或缺的元件,这让程序设计师一定要为了连接与访问数据库而去 学习 SQL ...

  6. Entity Framework (EF)/Linq To entity/ ESQL(entity sql)区别 ADO.NET Entity Framework:来自微软官方的ORM框架

    长久以来,程序员和数据库总是保持着一种微妙的关系,在商用应用程序中,数据库一定是不可或缺的元件,这让程序员一定要为了连接与访问数据库而去学习 SQL 指令,至少对于我而言,我觉得这是一个很不爽的事情. ...

  7. 软件开发知识--[ADO.NET Entity Framework]

    ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Vi ...

  8. Entity Framework 学习

    Entity Framework 学习初级篇1--EF基本概况... 2 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateE ...

  9. EF(ADO.NET Entity Framework)

    对象/关系映射框架 ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案.该框架曾经为.NET Framew ...

最新文章

  1. shell脚本求和_【零基础学云计算】Shell编程之case语句与循环语句
  2. Android之基于xmpp openfire smack开发之smack类库介绍和使用[2]
  3. “Found interface com.mysql.jdbc.Connection, but class was expected ”
  4. java 当中的验证码_Java Web中验证码的实现
  5. LightGBM(lgb)详解
  6. 值得收藏的Redis基础总结
  7. 算法(八):图解KNN算法
  8. matlab地址结构与转换,matlab数据类型和转换
  9. 新零售时代招商的新鲜玩法——用全网联动 促销活动来招商
  10. JavaScript 执行覆盖测试分析
  11. 关于最近开发小程序中踩过的那些坑
  12. Jenkins手动更新AWS 上面的ECS服务
  13. 设置java环境变量path_配置java环境变量path怎么设置
  14. python嵩天ppt_嵩天python课程笔记1
  15. 3GQQ幻想西游攻略
  16. 怎样将pdf文件页面旋转
  17. mysqli被遗弃了_在您的申请中被遗忘的权利
  18. [BZOJ1513]Tet-Tetris 3D
  19. Redis高可用 Sentinel
  20. 2023年,重新扬帆起航!

热门文章

  1. java主线程和子线程区别_主线程异常– Java
  2. Java RandomAccessFile示例
  3. 使用Kotlin的Android Spinner
  4. 功能接口 java8_Java 8功能接口
  5. java正则表达式验证_Java中的正则表达式电话号码验证
  6. angularjs 实例_AngularJS服务示例教程
  7. lshw linux_Linux lshw命令–获取Linux硬件信息
  8. 深入理解Python中的yield和send
  9. Python中的分片和索引方法
  10. svn: Commit failed (details follow): svn: Authorization failed