初次见面 你好EF

EF(yif),第一次听到这个名字的时候,以为是一个帅帅的魔术师,在小编的傻傻的梦想里,就是有一天,有一个魔术师站在小编面前,变出一大捧的玫瑰花,然后,然后不要钱`(*∩_∩*)′,然而在我们的编程世界里,也存在着同样神奇的魔术,今天小编就简单的总结一下关于EF的相关知识,然后举例说明。首先,我们来了解一下EF,百度百科对EF这样进行阐述:
        ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中发表。在小编的理解中EF是以.NET为基础,面向数据的实体框架,它利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。而在抽象化的结构之下,则是高度集成与对应结构的概念层、对应层和储存层,以及支持 Entity Framework 的数据提供者 (provider),让数据访问的工作得以顺利与完整的进行。简单来说让上层的应用程序码可以如面向对象的方式般访问数据。

       接着小编以增,删(改)查询为例,简单介绍一下EF的使用。从建立项目开始:

       第一步:点击新建项目;

        

        第二步:选择控制台应用程序,并命名;

        

        第三步:新建一个EFDemo之后, 右击添加新建项;

        

       第四步:选择ADO.NET实体数据模型,如果有的小伙伴没有这个选项的话,表明你装的VS不是很完整,需要重新安装哦。

        

       第五步:选择数据模型时,因为小编之前已经在数据库中建立好表了,所以我们这里先选择从数据库生成(即DB First),如果选择空模型,就可以在没有建立数据库的情况下,通过先建立实体模型来生成实体类和数据库表。空模型是什么意思nie,小编来简单的介绍一下,选择空模型即在没有建立数据库的情况下,先建立实体模型,再根据实体模型生成数据库。

        

        第六步:连接数据库连接,因为小编的数据库里面有信息,所以下面有相应的显示,如果小伙伴你的数据库里面没有信息,这个时候你就需要点击新建连接,如下图:

         

         第七步:点击新建连接,出现如下界面,根据蓝色字体的提示,一一填写好即可。

         

          第八步:点击测试连接,出现如下成功界面:

          

         第九步:点击确定之后,出现如下界面,这个时候,我们的应用程序与某个数据库进行连接已经自动匹配好了。注意因为连接字符串将会保存到配置文件中,所以在这里要选择“是,在连接字符串中包括敏感数据”。

         

         第十步:选择实体框架。

         

         第十一步:选择我们想要生成实体的表。

         

        第十二步:一切都完成后,如下图,edmx就已经根据我们所选的数据库表生成了相应的实体,同时,在解决方案资源管理器中的T4模板Model.tt下还为自动我们生成了category、news、comment实体类。

        

        至此,我们的edmx文件就已经创建完成了,代码如下所示:

        

[csharp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>  
  2. <edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">  
  3.  <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->  
  4.   <edmx:Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">  
  5.     <!-- Diagram content (shape and connector positions) -->  
  6.     <edmx:Diagrams>  
  7.       <Diagram DiagramId="a316256819df4b09862e85b379889e0e" Name="Diagram1">  
  8.         <EntityTypeShape EntityType="newssystemModel.category" Width="1.625" PointX="0.5" PointY="0.625" IsExpanded="true" />  
  9.            <EntityTypeShape EntityType="newssystemModel.comment" Width="1.5" PointX="4.625" PointY="1" IsExpanded="true" />  
  10.         <EntityTypeShape EntityType="newssystemModel.news" Width="1.5" PointX="2.75" PointY="0.5" IsExpanded="true" />  
  11.         <AssociationConnector Association="newssystemModel.FK_news_category" ManuallyRouted="false" />  
  12.         <AssociationConnector Association="newssystemModel.FK_comment_news" ManuallyRouted="false" />  
  13.       </Diagram>  
  14.     </edmx:Diagrams>  
  15.   </edmx:Designer>  
  16. </edmx:Edmx></span>  
       上述代码中,第一部分为edmx:Runtime关系用以自动生成实体类、映射、属性等cs代码,是接下来要重点分析的内容Designer部分是由设计器使用的,包含了图的布局等信息,接着,我们开始进行代码部分,做一个简单的例子,代码如下所示:

[csharp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;"><span style="font-size:18px;">using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6.   
  7. namespace EFDemo  
  8. {  
  9.     class Program  
  10.     {  
  11.           
  12.         static void Main(string[] args)  
  13.         {  
  14.               
  15.             //所有对数据库的操作第一就是创建数据库访问的上下文  
  16.             newssystemEntities dbContext = new newssystemEntities();  
  17.             #region 添加实体  
  18.             category cate = new category();  
  19.             cate.id = 29;  
  20.             cate.name = "财经新闻";  
  21.   
  22.             dbContext.category.AddObject(cate);//代表往dbcontext指向的数据库中的category表中添加一条数据category  
  23.             dbContext.SaveChanges();// 真正的保存到数据库  
  24.             #endregion   
  25.  
  26.              
  27.             #region  修改+删除  
  28.             category cate = new category();  
  29.             //把上下文dbcontext跟踪的实例:category的状态改成修改状态  
  30.             dbContext.ObjectStateManager.ChangObjectState(cate, newssystemEntities.modified);  
  31.   
  32.   
  33.             cate.id = 27;  
  34.             cate.name = "IT";  
  35.   
  36.             //修改此实体  
  37.             //第一步:将当前实体附件到上下文里面进行管理  
  38.             dbContext.category.Attach(cate);  
  39.             //把上下文dbContext跟踪的实例:category的状态改成修改状态  
  40.             dbContext.SaveChanges();  
  41.   
  42.             // O  M   R  
  43.             //ORM框架:帮助我们开发人员跟踪实体的变化,并将尸体的变化翻译成sql脚本,并执行到数据中去,也就是将  
  44.             //实体的变化映射到了表的变化  
  45.  
  46.             #endregion  
  47.  
  48.             #region 查询  
  49.             foreach (var cate1 in dbContext.category)  
  50.             {  
  51.               Console.WriteLine(string.Format("id:{0} name:{1}",cate1.id,cate1.name));      
  52.             }  
  53.             #endregion  
  54.  
  55.             #region  linq查询  
  56.             var item = (from b in dbContext.category  
  57.                         where b.id == 24  
  58.                         select b).SingleOrDefault();  
  59.                           
  60.             foreach (var cate in item)  
  61.             {  
  62.                  Console.WriteLine(cate.id);  
  63.             }  
  64.             List<category> listResult = new List<category>();  
  65.             foreach(var b in dbContext.category)  
  66.             {  
  67.                 if(b.id==24)  
  68.                 {  
  69.                     listResult.Add(b);  
  70.                 }  
  71.            }  
  72.  
  73.             #endregion  
  74.   
  75.             Console.ReadKey();  
  76.   
  77.   
  78.   
  79.         }  
  80.     }  
  81. }  
  82. </span></span>  
         至此,小例子结束。

        小编寄语:该博文,小编主要简单的介绍了一下有关于EF的基本知识,包括EF的核心edmx文件,edmx大致由SSDL、CSDL、C-S三部分组成,分别对应着对于数据库、实体、数据库表与实体之间的映射这三方面的解析,SSDL中有对数据库表、字段等的规定,CSDL中有对实体名、实体属性等的规定,C-S中有对数据库表与实体之间的映射。总的来说edmx文件就是用来解析存储模型、概念模型以及这两者之间的映射。学生档案管理项目,未完,待续...... 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值