没有合适的资源?快使用搜索试试~ 我知道了~
首页Entity Framework 4中文教程
Entity Framework 4中文教程
4星 · 超过85%的资源 需积分: 11 16 下载量 20 浏览量
更新于2023-06-13
评论
收藏 671KB PDF 举报
entity framework的中文教程,市面上难得的中文教程,希望对大家有帮助~
资源详情
资源评论
资源推荐
EntityFramework 教程
目录
预备知识 2
LINQ 技术 2
LINQ 技术的基础 C#3.0 2
自动属性 2
隐式类型 2
对象初始化器与集合初始化器 3
匿名类 3
扩展方法 4
Lambda 表达式 4
.NET 中的数据访问 4
DataSet 方案 5
改进的的 DataSet 方案 5
手写代码通过 ADO.NET2.0 连接类与数据库交互 5
ORM – LINQ to SQL 6
深入了解 Entity Framework 7
Entity Framework 的核心 – EDM(Entity Data Model) 7
EDM 概述 7
EDM 之 CSDL 7
EDM 之 SSDL 11
EDM 之 MSL 12
EDM 中存储过程的设计 15
EDM 中 ComplexType 的设计 16
实体数据模型映射方案 17
Entity Framework 的原理及使用方式 18
各种使用方式总结 18
使用技巧及需要注意的问题 21
几种方法的性能分析及使用选择 21
其它操作 EDM 的方式 22
为什么要使用 Entity Framework,限制条件及当前版本框架的问题 23
EDM 中的 DML 23
含有 Association 的 EDM 的使用 23
本文档主要介绍.NET 开发中两项新技术,.NET 平台语言中的语言集成查询技术 LINQ,与 ADO.NET
中新增的数据访问层设计技术 ADO.NET Entity Framework。ADO.NET 的 LINQ to Entity 部分以 LINQ
为基础,为了完整性本文档首先介绍 LINQ 技术。
预备知识
LINQ 技术
LINQ 是.NET 3.5 中新增的一种技术,这个技术扩展了.NET 平台上的编程语言,使其可以更加方便的进行
数据查询,单纯的 LINQ 技术主要完成对集合对象(如 System.Collection 下或 System.Collection.Generi
c 命名空间下的对象)的查询。结合 LINQ Provider 可以实现对 XML 文件(使用 LINQ to XML – 位于 S
ystem.Xml.Linq 命名空间下的类),数据库(可以使用 LINQ to SQL 或下文要详细介绍的 LINQ to Entit
y)等对象的操作。
LINQ 是一种运行时无关的技术,其运行于 CLR2.0 之上,微软对 C#3.0 与 VB9.0 的编译器进性扩展,从
而使其可以将 LINQ 编写的程序编译为可以被 CLR2.0 的 JIT 所理解的 MSIL。
LINQ 技术的基础 C#3.0
· 自动属性
· 隐式类型
· 对象集合初始化器
· 匿名类
· 扩展方法
· Lambda 表达式
自动属性
这个概念很简单,其简化了我们在.NET 的时候手写一堆私有成员+属性的编程方式,我们只需要使用如下
方式声明一个属性,编译器会自动生成所需的成员变量。
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
在我使用 LINQ 完成的项目中,使我了解到自动属性方便的一个用途如下:
在使用 LINQ 获取数据的过程中,我们常常需要使用 select new 语句查询出一个对象(往往是 IEnumer
able 类型的)用于数据绑定。在一般情况下如果是直接绑定(如直接将查询结果赋给一个 Gridview 控件的
DataSource 属性)我们可以直接 select new 来返回一个匿名类的对象。如果我们还需要对这个集合对象
进行进一步操作,我们将必须使用 select new classname 这样的语言返回一个类的对象,大部分情况下
这个类只作为实体的一个结构而不需要完成一些操作操作,这时候使用自动属性来完成这个类将是非常简
洁高效的。
隐式类型
这个名称可能对你很陌生,但是 var 这个关键字应该都用过,在 C#中使用 var 声明一个对象时,编译器会
自动根据其赋值语句推断这个局部变量的类型。赋值以后,这个变量的类型也就确定而不可以再进行更改。
另外 var 关键字也用于匿名类的声明。
应用场合:var 主要用途是表示一个 LINQ 查询的结果。这个结果可能是 ObjectQuery<>或 IQueryable<
>类型的对象,也可能是一个简单的实体类型的对象。这时使用 var 声明这个对象可以节省很多代码书写上
的时间。
对象初始化器与集合初始化器
在.NET2.0 中构造一个对象的方法一是提供一个重载的构造函数,二是用默认的构造函数生成一个对象,
然后对其属性进行赋值。在.NET3.5/C#3.0 中我们有一种更好的方式来进行对象的初始化。那就是使用对
象初始化器。这个特性也是匿名类的一个基础,所以放在匿名类之前介绍。
还是那就话,好的代码强于注释,下面用几个代码段说明初始化器:
(代码出自:李永京的博客 http://lyj.cnblogs.com)
基本用法:
User user = new User { Id = 1, Name = "YJingLee", Age = 22 };
嵌套使用:
User user = new User
{
Id = 1,
Name = "YJingLee",
Age = 22,
Address = new Address
{
City = "NanJing",
Zip = 21000
}
};
类似于对象初始化器初始化一个对象,集合初始化器初始化一个集合,一句话,有了它你就不用在将元
素通过 Add 逐个添加了。仍然给出代码示例:
基本使用:
List<int> num = new List<int> { 0, 1, 2, 6, 7, 8, 9 };
结合对象初始化器,我们可以写出如下简洁的代码:
List<User> user = new List<User>{
new User{Id=1,Name="YJingLee",Age=22},
new User{Id=2,Name="XieQing",Age=25},
};
应用场合:
还是前文提到的 select new classname 语法,后面可以直接接一个初始化器来将查询结果返回到这个
对象。
匿名类
有了前文初始化器的介绍,匿名类就很简单了。我们可以使用 new { object initializer }或 new[]{ object, …}
来初始化一个匿名类或不确定类型的数组。匿名类的对象需要使用 var 关键字声明。示例代码:
var p1 = new { Id = 1, Name = "YJingLee", Age = 22 };
应用场合:
还是同上面的例子提到的当直接使用 select new { object initializer }这样的语法就是将一个 LINQ 查询的
结果返回到一个匿名类中。
扩展方法
扩展方法是 C#中新增的很重要的特性之一。其对于 LINQ 的实现起着关键的作用。在.NET2.0 时代是没
有 LINQ 的,所以.NET2.0 以及之前版本中的集合类在设计的时候没有预留用于 LINQ 的方法。为了在不破
坏这个类现有封装的前提下又可以为其添加 LINQ 的支持就需要用到扩展方法。
扩展方法使用上类似于静态方法,但在本质上其是实例方法。这是由于.NET3.5 的运行环境仍然为 CLR
2.0 所以语言不可能做很大的变革,这一切都是语法糖。
下面仍然通过一段代码来说明扩展方法的实现:
(代码出自:李永京 http://lyj.cnblogs.com)
public static class Extensions
{
public static bool IsValidEmailAddress(this string s)
{
Regex regex = new Regex(@"^[\w\.]+@([\w]+\.)+[\w]{2,4}$");
return regex.IsMatch(s);
}
}
如上代码所示,扩展方法为一静态方法,声明于一个静态类,其参数前加上一个 this 关键字,参数的类型
表示这个扩展方法要对这个类型进行扩展。如上述代码表示其要对字符串类型进行扩展。
在应用上扩展方法被作为其扩展的类型的静态方法来调用。如下:
if (email.IsValidEmailAddress())
{
Response.Write("YJingLee 提示:这是一个正确的邮件地址");
}
Lambda表达式
Lambda 表达式是对.NET2.0 中匿名方法在语法形式上的进一步改进,仍然以代码说明:
var inString = list.FindAll(delegate(string s) { return s.Indexof("YJingLee") >= 0; });
使用 Lambda 表达式代码将更自然易懂。
var inString = list.FindAll(s => s.Indexof("YJingLee") >= 0);
可以看出,Lambda 表达式格式为:(参数列表)=>表达式或语句块
“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类
型。
剩余33页未读,继续阅读
wackelbh
- 粉丝: 19
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4