EF简介
EF:EF是 asp.net的一套ORM框架.
ORM:
广义上:ORM指的是面向对象的模型和关系型数据库的数据库之间的相互转换;
狭义上:ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据接口。
Dbcontext:这个类就是实现关系型数据库和面线对象交互的数据接口。
一、当添加完EF实体之后:
1、系统会自动生成一个(对应ef模块名.content.tt文件), 这个模版是帮助我们生成ef访问上下文的,里面有一个数据库实体,上面这个例子是TestEntities实体,不管你添加什么样的数据库实体,都会自动继承Dbcontext这个类,所以Dbcontext:这个类就是实现关系型数据库和面线对象交互的通用数据接口。
2、系统还会生成一个(对应ef模块名.tt文件),这个模版是帮助我们生成一个数据库对应的表实体.
3、另外需要注意一点,系统还会生成一个(对应ef模块名.Designer.cs文件)这个文件在ef4.0之后里面是没有代码的,但是在ef4.0的时候是有的,那个时候里面存放的是数据库上下文和数据库对应的表实体,如果你需要使这个(对应ef模块名.Designer.cs文件)文件里面的文件重现,你只需要找到对应的数据库模型,右键模型,点击属性-代码生成策略-改为默认值,就可以了,但是这会与(对应ef模块名.tt文件)文件里面的模型产生冲突.
4、系统会自动添加EntityFramework和System.Data.Entity两个引用.
二、使用ef进行数据库的增删改差:
ef实现增删改差的流程:(1)通过把实体的变化,转换成数据处理类(语句) (2)通过调用ADO.NET将处理类(语句)转换成sql语句(3)将sql语句插入到数据库中执行并返回结果(4)ADO.NET将数据库结果返回给程序
通俗点说,就是ef帮助我们把实体的变化翻译成sql语句,然后调用底层的ADO.NET保存到数据库中去。
1、当使用上下文操作数据库表时,被操作表必须含有主键,否则回报错。
2、
//利用EF像数据库中添加一条数据 //first step:创建访问数据库的统一入口.创建EF的上下文
TestEntities dbContext = new TestEntities(); #region 添加一条数据
//second step:操作实体
T_ConsultingList list = new T_ConsultingList();
list.Content = "EF测试"; //third step:告诉上下文执行添加操作;
dbContext.T_ConsultingList.Add(list);
//dbContext.Entry(list).State = EntityState.Added; 也可以这样写 //forth step:告诉上下文,执行保存操作
dbContext.SaveChanges();
#endregion list.AutoId = ; //修改或删除必须要有主键 list.Content = DateTime.Now.Day.ToString();//操作实体对应的属性 dbContext.Entry(list).State = EntityState.Modified; //将当前实体标记为修改 dbContext.SaveChanges();//告诉上下文把所有标记了的实体映射回数据库,也就是把所有标记为modified都生成update语句到数据库里面去执行
注意上面这段代码,上面的添加操作能正常完成,但是下面的修改会报错,错误如下:
属性“AutoId”是对象的键信息的一部分,不能修改。
错误的原因我们来分析下:
经过调试代码我们发现,当我们第一次new T_ConsultingList对象时,这个对象为空,当我们使用ef添加完数据后,再去观察这个对象我们会发现,这个对象里面已经有值了,而里面的值就是我们刚才所添加的值,说明在我们执行完数据库添加操作之后,数据库里面的数据马上将我们所添加的数据马上映射给了当前的实体对象,所以当我们在下面指定需要修改的记录的主键时,如果修改和添加共用同一个对象,那么我们只能修改刚刚添加的那条记录,而不能修改其他的记录,如果要修改,必须像下面这样:重新在new 一个T_ConsultingList对象,那么原先数据库映射回来的数据会被覆盖掉;理解这一点跟重要!
//利用EF像数据库中添加一条数据 //first step:创建访问数据库的统一入口.创建EF的上下文
TestEntities dbContext = new TestEntities(); #region 添加一条数据
//second step:操作实体
T_ConsultingList list = new T_ConsultingList();
list.Content = "EF测试"; //third step:告诉上下文执行添加操作;
dbContext.T_ConsultingList.Add(list);
//dbContext.Entry(list).State = EntityState.Added; 也可以这样写 //forth step:告诉上下文,执行保存操作
dbContext.SaveChanges();
#endregion T_ConsultingList list1 = new T_ConsultingList();
list1.AutoId = ; //修改或删除必须要有主键 list1.Content = DateTime.Now.Day.ToString();//操作实体对应的属性 dbContext.Entry(list1).State = EntityState.Modified; //将当前实体标记为修改 dbContext.SaveChanges();//告诉上下文把所有标记了的实体映射回数据库,也就是把所有标记为modified都生成update语句到数据库里面去执行
这段代码相比上面多了一行代码: T_ConsultingList list1 = new T_ConsultingList(); list1相当于一个新对象,你可以利用这个对象,来指定你要修改(或删除)的对应记录的id和修改的内容。而不是用数据库映射回来的那条数据,如果你用映射回来的那条数据,但是你打算修改的那条数据的主键id却不是映射回来的那条数据的主键id,那么就会认为你要修改映射回来的那条数据的主键id,而主键是不允许修改的,所以就会报错!
3、当我们在操作完数据库对应的表示表实体后,执行dbContext.SaveChanges()后,编译器报一个实体或多个实体验证失败!这个错误的时候,大多数情况下,是我们添加的字段的数据长度超过我们数据库定义的字段的长度,或者是我们添加的字段的数据类型和数据库的字段类型不一样导致。
EF简介的更多相关文章
- EF简介及CRUD简单DEMO
一.实体框架(Entity FrameWork)简介 • 简称EF • 与Asp.Net MVC关系与ADO.NET关系 • ADO.NET Entity FrameWork是微软以ADO.NET为基 ...
- 第一节:EF Core简介和CodeFirst和DBFirst两种映射模式(以SQLite和SQLServer为例)
一. EF简介 1. 定义 Entity Framework (EF) Core 是轻量化.可扩展.开源和跨平台的数据访问技术,它还是一种对象关系映射器(ORM),它使.NET 开发人员能够使用面向对 ...
- MVC – 3.EF(Entity Framework)
1.实体框架(EF)简介 与ADO.NET的关系 全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框 ...
- EF的简单认识
EF的简单认识 EF简介 EntityFramwork是微软提供的一款ORM框架(Object Relational Mapping),实体映射模型,它的底层是ADO.NET的机制,使用EF将省去 ...
- EF怎样实现ORM思想的(转载)
EF简介 实体框架(Entity Framework)简称EF,是微软以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案.是ADO.NET中的一组支持开发面向数据的软件应 ...
- Linq基础知识小记四之操作EF
1.EF简介 EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Dat ...
- MVC – 3.EF(Entity Framework)
1.实体框架(EF)简介 与ADO.NET的关系 全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框 ...
- Entity Framework(EF)(一)之database first
1.EF简介ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案.该框架曾经为.NET Framework的 ...
- EF database first
https://www.cnblogs.com/net064/p/8024150.html 1.EF简介ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对 ...
随机推荐
- WIN ERROR:C:\Windows\System32\<LANG_NAME>\mstsc.exe.MUI
Issue: When you upgrade Win7, you may found your remote desktop will not work. You may get following ...
- wetask.cn领度任务全新试用体验
管理一个公司或者团队,最困难的事情莫过于追踪大家的工作状况,往往是任务分配下去了,无法及时掌握进度.做绩效评估时候仅凭主观判断,无法清晰掌握团队的工作成绩和工作效率.团队日报.周报各种报表繁多,也是事 ...
- mysql 存储过程 动态sql例子
proc:BEGIN ; ; ; ) DEFAULT ''; ) DEFAULT ''; ) DEFAULT '';#插入日志的表,一个活动一张表 #将局部变量转换成会话变量 #动态sql语言只接受会 ...
- error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]”转换为“char *”
原本打算在QT用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. zajiao zajiao1("AB ...
- 【每天一个Linux命令】13. Linux中whereis命令的用法
命令用途 whereis命令用来查找命令的位置,包括执行文件.源代码和手册页文件 命令用法 1. 查找指定命令<command>的位置,包括执行文件.源代码和手册页文件 格式:wher ...
- Linux Kernel系列一:开篇和Kernel启动概要
前言 近期几个月将Linux Kernel的大概研究了一下,以下须要进行深入具体的分析.主要将以S3C2440的一块开发板为硬件实体.大概包含例如以下内容: 1 bootloader分析,以uboot ...
- Eclipse快捷键大全(一)
Eclipse快捷键大全(一) 常用(系统默认): 1.Format (自动排版) : Ctrl+Shift+F 2.Organize Imports (自动导入) : Ctrl+Shift+O 3. ...
- 解决ubuntu 14.04删ibus导致系统设置项目的损失后,,退出关机问题是不正常的
已安装sogou第一篇文章.嫌ibus碍眼,习惯性删.我没想到会引起一系列问题.退出登录用户崩溃.系统设置非常多的项目. 它似乎ubuntu 14.04于ibus它不能被卸载(卸载iBus本身没有问题 ...
- Php开源项目大全
WordPress [PHP开源 博客Blog] WordPress是最热门的开源个人信息发布系统(Blog)之一,基于PHP+MySQL构建.WordPress提供的功能包括: 1.文章发布.分类 ...
- Datatable根据多行排序
DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("Na ...