简要介绍EF(实体框架).doc

简要介绍EF(实体框架).doc

ID:50364967

大小:592.55 KB

页数:12页

时间:2020-03-08

简要介绍EF(实体框架).doc_第1页
简要介绍EF(实体框架).doc_第2页
简要介绍EF(实体框架).doc_第3页
简要介绍EF(实体框架).doc_第4页
简要介绍EF(实体框架).doc_第5页
资源描述:

《简要介绍EF(实体框架).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、一、实体框架(EntityFramework)介绍实体框架(EntityFramework)是微软以ADO.Net为基础开发出来的对象关系映射(ORM)解决方案,它解决了对象持久化问题,将程序员从编写麻烦的SQL语句当中解放出来。相对于传统的ADO等各种数据库操纵技术来说,微软的ADO.Net更为先进,它封装了很多底层操作,抽象了接口,针对接口编程,将调用统一化。但这种方法也已经满足不了项目开发的应用了,于是我们进入了对象关系映射(ORM)的时代!先看个例子,我们新建数据库DemoDB和数据表UserInfo:EF是.Net平台

2、下的一个组件,在项目下右击添加项,添加一个ADO.Net实体数据模型,选择从数据库生成,选择这个数据库和表,就能得到如下项:双击这个edmx进去,可以看到:这个亲切的模型和数据库表是完全对应的,当实体或者数据库变化时,我们可以让他们同步修改。生成的cs文件里保存了实体的信息,打开它,这个类分为上下文和实体两部分。实体的基元属性当中保存了表字段对应的信息,如:上下文则是程序员操作数据库的入口,里面有编程时用的东西。二、一个小例子既然上下文是操作数据库的入口,所以我们要先new一个上下文,然后创建实体,以面向对象的方式写属性,然后入

3、库,保存修改。(NHibernate里这上下文叫“session”。)这就写完了。我们再也不用写蛋疼的ADO.Net代码了!这段代码相当于调用了一个“中间层”,再由它调用数据库操纵方法。三、这背后到底发生了什么?首先写数据库要有链接字符串,显然在App.Config里,打开看一看:这连接字符串后面的部分就是一般的链接字符串,EF其实是跨数据库的,注意第六行,可以通过这里换数据库。在这前面,它指定了csdl、ssdl和msl文件,这些文件在我们项目里找不到,它们到底在哪呢?在添加进来的实体对象上右击-打开方式-以XML方式打开它,

4、我们立刻看到SSDL部分:SSDL是存储摸型的定义,在这里我们能很清楚地看到XML里保存了类名和数据库表中的信息。往下看CSDL:CSDL是概念模型的定义,里面描述了C#语言中的属性和数据表的对应关系。再往下看映射关系:这个映射就是数据库字段和C#对象属性的中间桥梁!其实框架的核心工作就是通过这个映射生成SQL语句,然后调用ADO.Net!(NHibernate跟这个是一个套路)用图来解释这个过程,就是这样:ORM就是这么回事:下面这图也不用多解释了(换数据库时只要换EntityClient的配置就行):四、再用Linq语句写个

5、查询代码很简单:先用Linq语句从demoDb这个对象的UserInfo表单中查询出临时数据,这个var是个强类型IQueryable集合,遍历返回的集合输出就是了。u代表demoBb.UserInfo中的一项,名字可以随意取,最后用select语句取出来。当然我们可以在select语句前面加where条件。比如:whereu.Name==“李刚”。如果根据主键查询,显然只能查询到一条记录,则可以使用SingleOrDefault方法。这条查询语句是在foreach遍历时才“延迟加载”的,在NHibernate中我们要先写HQL

6、语句,然后再遍历输出,道理都是一样的。关于“延迟加载”是Linq的一个特性(NHibernate也是如此),后面再讨论怎么让它不延迟。五、写完这套增删改查改的话,要先查出要改哪条,这里来改数据表中的第一条。查询出的IQueryable集合的First方法如果遇到空集合会抛异常,所以我们用FirstOrDefault方法来避免异常。删除也一样。六、EF的ModelFirst方式以及数据表同步更新前面那种先建立数据库然后建立模型进行操作的方式叫DBFirst方式,是传统方式。EF还给我们提供了另一种ModelFirst方式。下面是个

7、例子:建立一个新项目,添加一个叫School的实体模型,选择空模型,右键添加实体,叫Teacher,这里的“实体集”的名字,就是上下文中我们编程操纵的名字,不一定和表名一致,一般情况下我们习惯编程时使用的表名和数据库表名一致,所以把这个默认的“集”字去掉,上面的基类型一般就写无,这个后面讨论。这样我们就创建完实体了。在实体上右键添加标量属性Name,然后通过右边的属性栏可以修改它的属性。注意,我们Id是GUID类型的,所以要在Id的属性里把Identity设置为None(如果是Int型的可以自动增长)。然后加入Phone属性,最

8、大长度16,再添加Address属性。之后,创建Student实体,有Id(GUID)和Name属性。然后来设定一个老师对应多个学生的关系。在空白处右击添加关联。注意这个界面,如果老师和学生是一对多的关系,那想要添加学生的话,必须先有老师这个主实体,如果老师不存

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。