接着小编以增,删(改)查询为例,简单介绍一下EF的使用。从建立项目开始:
第一步:点击新建项目;
第二步:选择控制台应用程序,并命名;
第三步:新建一个EFDemo之后, 右击添加新建项;
第四步:选择ADO.NET实体数据模型,如果有的小伙伴没有这个选项的话,表明你装的VS不是很完整,需要重新安装哦。
第五步:选择数据模型时,因为小编之前已经在数据库中建立好表了,所以我们这里先选择从数据库生成(即DB First),如果选择空模型,就可以在没有建立数据库的情况下,通过先建立实体模型来生成实体类和数据库表。空模型是什么意思nie,小编来简单的介绍一下,选择空模型即在没有建立数据库的情况下,先建立实体模型,再根据实体模型生成数据库。
第六步:连接数据库连接,因为小编的数据库里面有信息,所以下面有相应的显示,如果小伙伴你的数据库里面没有信息,这个时候你就需要点击新建连接,如下图:
第七步:点击新建连接,出现如下界面,根据蓝色字体的提示,一一填写好即可。
第八步:点击测试连接,出现如下成功界面:
第九步:点击确定之后,出现如下界面,这个时候,我们的应用程序与某个数据库进行连接已经自动匹配好了。注意因为连接字符串将会保存到配置文件中,所以在这里要选择“是,在连接字符串中包括敏感数据”。
第十步:选择实体框架。
第十一步:选择我们想要生成实体的表。
第十二步:一切都完成后,如下图,edmx就已经根据我们所选的数据库表生成了相应的实体,同时,在解决方案资源管理器中的T4模板Model.tt下还为自动我们生成了category、news、comment实体类。
至此,我们的edmx文件就已经创建完成了,代码如下所示:
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx"> <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) --> <edmx:Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx"> <!-- Diagram content (shape and connector positions) --> <edmx:Diagrams> <Diagram DiagramId="a316256819df4b09862e85b379889e0e" Name="Diagram1"> <EntityTypeShape EntityType="newssystemModel.category" Width="1.625" PointX="0.5" PointY="0.625" IsExpanded="true" /> <EntityTypeShape EntityType="newssystemModel.comment" Width="1.5" PointX="4.625" PointY="1" IsExpanded="true" /> <EntityTypeShape EntityType="newssystemModel.news" Width="1.5" PointX="2.75" PointY="0.5" IsExpanded="true" /> <AssociationConnector Association="newssystemModel.FK_news_category" ManuallyRouted="false" /> <AssociationConnector Association="newssystemModel.FK_comment_news" ManuallyRouted="false" /> </Diagram> </edmx:Diagrams> </edmx:Designer> </edmx:Edmx></span>上述代码中,第一部分为edmx:Runtime关系用以自动生成实体类、映射、属性等cs代码,是接下来要重点分析的内容Designer部分是由设计器使用的,包含了图的布局等信息,接着,我们开始进行代码部分,做一个简单的例子,代码如下所示:
<span style="font-size:18px;"><span style="font-size:18px;">using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EFDemo { class Program { static void Main(string[] args) { //所有对数据库的操作第一就是创建数据库访问的上下文 newssystemEntities dbContext = new newssystemEntities(); #region 添加实体 category cate = new category(); cate.id = 29; cate.name = "财经新闻"; dbContext.category.AddObject(cate);//代表往dbcontext指向的数据库中的category表中添加一条数据category dbContext.SaveChanges();// 真正的保存到数据库 #endregion #region 修改+删除 category cate = new category(); //把上下文dbcontext跟踪的实例:category的状态改成修改状态 dbContext.ObjectStateManager.ChangObjectState(cate, newssystemEntities.modified); cate.id = 27; cate.name = "IT"; //修改此实体 //第一步:将当前实体附件到上下文里面进行管理 dbContext.category.Attach(cate); //把上下文dbContext跟踪的实例:category的状态改成修改状态 dbContext.SaveChanges(); // O M R //ORM框架:帮助我们开发人员跟踪实体的变化,并将尸体的变化翻译成sql脚本,并执行到数据中去,也就是将 //实体的变化映射到了表的变化 #endregion #region 查询 foreach (var cate1 in dbContext.category) { Console.WriteLine(string.Format("id:{0} name:{1}",cate1.id,cate1.name)); } #endregion #region linq查询 var item = (from b in dbContext.category where b.id == 24 select b).SingleOrDefault(); foreach (var cate in item) { Console.WriteLine(cate.id); } List<category> listResult = new List<category>(); foreach(var b in dbContext.category) { if(b.id==24) { listResult.Add(b); } } #endregion Console.ReadKey(); } } } </span></span>至此,小例子结束。
小编寄语:该博文,小编主要简单的介绍了一下有关于EF的基本知识,包括EF的核心edmx文件,edmx大致由SSDL、CSDL、C-S三部分组成,分别对应着对于数据库、实体、数据库表与实体之间的映射这三方面的解析,SSDL中有对数据库表、字段等的规定,CSDL中有对实体名、实体属性等的规定,C-S中有对数据库表与实体之间的映射。总的来说edmx文件就是用来解析存储模型、概念模型以及这两者之间的映射。学生档案管理项目,未完,待续......