对于在。NET平台上,程序员操纵数据的方法主要是通过使用ADO.NET。而我们的MVC操作数据库呢?与ADO相比有什么优势。NET?
1.大家都在说的EF是什么?
EF,全名EntityFramWork。它就是微软基于ADO.NET开发的所谓ORM(对象关系映射框架,或数据持久化框架)。
简单来说就是一个面向对象的操作框架,根据实体对象对数据表中的数据进行操作,具体底层也叫ADO.NET。
让我们演示如何使用EF来操作数据库:
在数据库图表中,表之间的关系如下:
1)如何创建实体对象模型文件。
创建基于ADO.NET的实体数据模型。
在这里,我右键单击我的模型文件夹中的新项目(它可以在任何地方),然后单击输入。在左侧的模板中,选择数据,您将在右侧看到ADO.NET实体数据模型选项,如下图所示:
点击〖创建〗按钮,进入实体数据模型向导,可以选择如何创建实体数据模型。
注意:这里可以单独选择一个型号,在下面的方框里可以看到两个型号的区别,这里就不做解释了。
因为我们从现有的数据库创建实体模型,所以我们选择第一个“从数据库生成”。
点击下一步,进入连接数据库向导。通过创建一个新的连接,可以连接到自己的SQLServer服务器,然后选择我们要连接的数据库,同时生成一个实体连接字符串,如下图所示:
点击下一步,选择“实体框架版本”。
接下来,选择要包含在模型中的数据库对象,选择“确定生成对象的单一和多种形式”,并保留其他作为默认值。单击完成。下图:
此时,我们的Models文件夹下会生成一个edmx文件,EF框架的设计者会帮助我们生成根据数据表关系生成的实体类的关系图,如下图所示:
注意:您是否发现该表与我们在数据库图表中看到的图表有些相似?是的,它们非常相似,但意义不同。数据库视图展示了数据表之间的关系,这里展示的EF帮助我们根据数据表之间的关系生成实体类的关系。
2)生成的edmx文件是什么?
edmx文件的代码树如下:
(XML文件怎么样?
通过“右键”“打开方式”“在XML编辑器中打开”,我们可以发现这个edmx文件是一个标准的XML文件,它主要有三个块,描述了我们的实体对象和数据库映射之间的关系。下图:
。cs文件可以在。TT档案?
数据库上下文类。
在代码树中,我们可以很容易地发现。cs类文件是在。tt档案。“OumindBlog”的代码和功能。Context.cs "文件如下:
//继承自DbContext类,//data context类,用于操作数据库。负责维护实体状态,根据实体对象打包类的状态属性。生成不同的SQL语句并执行公共分部类oumindblogentities:db上下文{ public oumindblogenties 3360 base(' name=oumindblogenties 3360 base '){ }。受保护的覆盖void onmodel creating(DBMolderBuilder modelBuilder){抛出新的UnInstallCodeFirstException();} public DbSetBlogArticle BlogArticles { get;设置;} public DbSetBlogArticleCate BlogArticleCates { get;设置;} public DbSetBlogUser BlogUsers { get;设置;}公共DbSetEnumeration枚举{ get设置;}}实体类。
另一个生成的类是什么?tt申请?让我们打开一个代码:
//EF实体类公共分部类blogarticlate { public blogarticlate(){ this。博客文章=new hashsetblogarticle();} public int Id { get设置;} public int Author { get设置;}公共字符串名称{ get设置;}公共字符串Remote { get;设置;} public int Statu { get设置;} public bool IsDel { get设置;}公共系统。DateTime Addtime { get设置;}//生成的外键属性public virtual I collection blog articles { get;设置;}公共虚拟BlogUser BlogUser { get设置;}}很容易发现这些字段对应的是我们数据库中的字段,也就是EF根据实体模型生成的实体类,现在变成了外键属性。
第二,用EF操作数据库。
在上面的“OumindBlog。Context.cs”,继承自DbContext的OumindBlogEntities类是为了维护实体状态和操作数据库而生成的,所以我们首先要创建这个类的对象,操作数据的代码如下:
//创建数据库上下文类的对象oumindblogentics db=new oumindblogentics();# region query article list action result article()///summary///query article list////summary///returns/returns public action result article(){//get article list db . blog articles . where through db对象(p=p . aisdel==false);//使用lambda表达式获取已删除的文章//使用lambda表达式获取数据//返回一个ListT对象来存储文章列表模型的列表。博客文章列表=db . blog articles . where(p=p . aisdel==false)。to list();//还可以使用Linq获取数据listmodels.blog article list1=(来自db.blog articles中的p,其中p.aisdel==false select p)。to list();//使用ViewData传递列表对象view data[' DataList ']=list;返回视图();} #endregion然后我们为文章创建一个视图并接收数据。因为我们需要使用BlogArticle对象来显示数据,所以我们应该首先导入命名空间。
!-那么显示数据的代码是:复制代码!-获取数据并显示html-div表id=' tblist ' tr thid/th title/th分类/th状态/th时间/th操作/th /tr!-通过Action方法遍历集合数据集到ViewData,生成HTML代码-@ foreach(将视图数据['datalist']中的blog文章a作为listbog){ tr td@a.AId/td td@a.ATitle/td td@a.BlogArticleCate.Name/. TD @ a . enumeration . e _ cname/TD td@a.AAddtime/td/tr}/table/div的结果如下:
三.摘要
1)EF框架根据我们数据库中的数据模型生成实体数据模型;
2)实体数据模型为edmx文件,文件为标准的XML文件,主要描述实体对象与数据库的映射关系;
3).tt文件为我们生成数据库上下文类(用于操作数据库)和实体类(表示实体对象和外键之间的属性关系)。
4)实体对象可以使用Lamabda表达式或Linq查询所需数据,使用List对象存储数据;
5)代码简单易懂,实际操作中不需要像ADO.net那样创建大量的数据库访问层;
以上就是本文的全部内容,希望对大家的学习有所帮助。