初次见面 你好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文件就已经创建完成了,代码如下所示:
<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的更多相关文章
- 饮一盏Bug留香,唱一曲项目飞扬
沿途的风景 牵挂的项目 两情迢迢 学生档案管理项目在2月的末尾从稍带寒意的季节里完成了第一次迭代,验收的结果不尽善尽美,演示的功能也惨不忍睹,各种"关爱"的点评充斥耳旁 ...
- 【Day1】3.数据类型
视频地址(全部) https://edu.csdn.net/course/detail/26057 课件地址(全部) https://download.csdn.net/download/gentl ...
- %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 ...
- webpack 往右一点之 “你好,初次见面”
webpack 模块打包器 模块化工具的目标: 将依赖树拆分成按需加载的块 初始化加载的耗时尽量少 各种静态资源都可以视作模块 将第三方库整合成模块 自定义打包逻辑 适合大项目
- 2.EF中 Code-First 方式的数据库迁移
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...
- EF实体框架处理实体之间关联关系与EF延迟机制(下)
在数据库中,表与表之间可能存在多种联系,比如,一对多,多对多的关系.当我们使用逻辑外键在数据库建立两张表之间的关系的时候,我们使用EF实体框架 必然也会将这种关系映射到我们的实体关系中来.所以,在我们 ...
- 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,这种形 ...
- EF中 Code-First 方式的数据库迁移
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...
- ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF 框架服务 上一章节中我们了解了 Entity ...
随机推荐
- ubuntu 16.04 安装 tensorflow-gpu 包括 CUDA ,CUDNN,CONDA
ubuntu 16.04 安装 tensorflow-gpu 包括 CUDA ,CUDNN,CONDA 显卡驱动装好了,如图: 英文原文链接: https://github.com/williamFa ...
- 用 ConfigMap 管理配置 - 每天5分钟玩转 Docker 容器技术(159)
Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap. ConfigMap 的创建和使用方式与 Secret 非常类 ...
- new File()
首先 File 类是对文件系统的映射 并不是硬盘上真实的文件所以 new File("xxx.xxx") 只是在内存中创建File文件映射对象,而并不会在硬盘中创建文件 如果需要创 ...
- BI之SSIS入门最新版Visual Studio调试技巧
简介 最近公司业务需要用到BI SSIS,SSIS是什么?"SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案( ...
- logback学习二
转载:https://www.cnblogs.com/DeepLearing/p/5663178.html 属性 : debug : 默认为false ,设置为true时,将打印出logback内部日 ...
- 聪明的搜索算法’ A*算法
A*算法 是一种启发式的搜索算法. 了解BFS.DFS或者Dijkstra算法的人应该知道.这些算法都是一种向四周盲目式搜索的方法. 启发式搜索: 启发式搜索就是在状态空间中的搜索 ...
- 吐槽:【计算机网络与通信】.张元.高清文字版.pdf
看了这本书的pdf,发现了一处错误,瞬间就不想再看了.新下载了谢希仁老师的<计算机网络>.
- 动手实现一个vue中的模态对话框组件
写在前面 对话框是很常用的组件 , 在很多地方都会用到,一般我们可以使用自带的alert来弹出对话框,但是假如是设计 出的图该怎么办呢 ,所以我们需要自己写一个对话框,并且如果有很多地方都用到,那我们 ...
- iOS开源加密相册Agony的实现(五)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
- GitHub Android Librarys Top 100 简介
GitHub Android Librarys Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索J ...