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文件就已经创建完成了,代码如下所示:

<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文件就是用来解析存储模型、概念模型以及这两者之间的映射。学生档案管理项目,未完,待续......

初次见面 你好EF的更多相关文章

  1. 饮一盏Bug留香,唱一曲项目飞扬

    沿途的风景    牵挂的项目    两情迢迢 学生档案管理项目在2月的末尾从稍带寒意的季节里完成了第一次迭代,验收的结果不尽善尽美,演示的功能也惨不忍睹,各种"关爱"的点评充斥耳旁 ...

  2. 【Day1】3.数据类型

     视频地址(全部) https://edu.csdn.net/course/detail/26057 课件地址(全部) https://download.csdn.net/download/gentl ...

  3. %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91

    "%3Cdiv%20class%3D%22htmledit_views%22%20id%3D%22content_views%22%3E%0A%20%20%20%20%20%20%20%20 ...

  4. webpack 往右一点之 “你好,初次见面”

    webpack  模块打包器 模块化工具的目标: 将依赖树拆分成按需加载的块 初始化加载的耗时尽量少 各种静态资源都可以视作模块 将第三方库整合成模块 自定义打包逻辑 适合大项目

  5. 2.EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  6. EF实体框架处理实体之间关联关系与EF延迟机制(下)

    在数据库中,表与表之间可能存在多种联系,比如,一对多,多对多的关系.当我们使用逻辑外键在数据库建立两张表之间的关系的时候,我们使用EF实体框架 必然也会将这种关系映射到我们的实体关系中来.所以,在我们 ...

  7. C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入

    C# 嵌入dll   在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...

  8. EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  9. ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF 框架服务 上一章节中我们了解了 Entity ...

随机推荐

  1. Unique-paths (动态规划)

    题目描述 A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below) ...

  2. 谷歌发布 TensorFlow Serving

    TensorFlow服务是一个灵活的,高性能的机器学习模型的服务系统,专为生产环境而设计. TensorFlow服务可以轻松部署新的算法和实验,同时保持相同的服务器体系结构和API. TensorFl ...

  3. 毕业回馈-89C51之GPIO使用(流水灯)

    今天分享一个89c51制作的8位流水灯案例.使用Proteus仿真. 同上一遍文章不同.上一篇文章中对于GPIO操作主要是位操作,即sbit led1=P0^0;其中P0^0代表p0.0这个引脚,然后 ...

  4. Linux系统上的命令使用方法

    许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...

  5. CSS(一)解析浮动塌陷与清除浮动

    清除浮动方法 1.对父级设置适合CSS高度,父级元素撑开并且包含子元素. <p>固定高度</p> <div style="height: 50px;" ...

  6. MySQL DATEDIFF() 函数

    定义和用法 DATEDIFF() 函数返回两个日期之间的天数. 语法 DATEDIFF(date1,date2) date1 和 date2 参数是合法的日期或日期/时间表达式. 注释:只有值的日期部 ...

  7. NavigationView使用过程的问题解决

    NavigationView是android support design库提供的侧滑面板控件,通常与support v4库里的DrawerLayout侧滑控件搭配使用.以下是使用过程中遇到的问题及解 ...

  8. Spring Boot 中应用Spring data mongdb

    摘要 本文主要简单介绍下如何在Spring Boot 项目中使用Spring data mongdb.没有深入探究,仅供入门参考. 文末有代码链接 准备 安装mongodb 需要连接mongodb,所 ...

  9. Playground中格式注释语法

    类似于Ruby的ruby document,Xcode的Playground自身也提供一些嵌入文档中的格式注释的语法. 我们先定义一个简单的类: class A{ } 按住opt点击class A,你 ...

  10. 说一说关于破解支付宝AR红包的事

    当朋友圈的你们才开始分享支付宝AR红包的消息的时候,我已经对它动了一二三四次歪脑筋了,虽然事实证明并不是那么顺利,至今我也只在电脑前识别出5个不知道在哪里的红包,其中一个还因为定位信息不符开不了. 昨 ...