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简介的更多相关文章

  1. EF简介及CRUD简单DEMO

    一.实体框架(Entity FrameWork)简介 • 简称EF • 与Asp.Net MVC关系与ADO.NET关系 • ADO.NET Entity FrameWork是微软以ADO.NET为基 ...

  2. 第一节:EF Core简介和CodeFirst和DBFirst两种映射模式(以SQLite和SQLServer为例)

    一. EF简介 1. 定义 Entity Framework (EF) Core 是轻量化.可扩展.开源和跨平台的数据访问技术,它还是一种对象关系映射器(ORM),它使.NET 开发人员能够使用面向对 ...

  3. MVC – 3.EF(Entity Framework)

    1.实体框架(EF)简介 与ADO.NET的关系 全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框 ...

  4. EF的简单认识

    EF的简单认识   EF简介 EntityFramwork是微软提供的一款ORM框架(Object Relational Mapping),实体映射模型,它的底层是ADO.NET的机制,使用EF将省去 ...

  5. EF怎样实现ORM思想的(转载)

    EF简介 实体框架(Entity Framework)简称EF,是微软以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案.是ADO.NET中的一组支持开发面向数据的软件应 ...

  6. Linq基础知识小记四之操作EF

    1.EF简介 EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Dat ...

  7. MVC – 3.EF(Entity Framework)

    1.实体框架(EF)简介 与ADO.NET的关系 全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框 ...

  8. Entity Framework(EF)(一)之database first

    1.EF简介ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案.该框架曾经为.NET Framework的 ...

  9. EF database first

    https://www.cnblogs.com/net064/p/8024150.html 1.EF简介ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对 ...

随机推荐

  1. javascript第八课匿名函数的使用

    window.onload=function(){ //当窗体载入完成之后执行方法里的内容 document.getElementById("html标签id").onclick= ...

  2. H264源码分析(四)

    sub_mb_pred( mb_type ) {       for( mbPartIdx = 0; mbPartIdx < 4; mbPartIdx++ )                  ...

  3. [置顶] 【IOS】IOS7 UI适配

    昨天下了把手机升级成了IOS7 正式版,然后下了最新的xocde5.  试着编译了一下刚刚完成的几个应用,还好问题不大,半个小时的时间都适配好了,然后改了下几个新出现的warning.过几天等空了,要 ...

  4. 理解数据点,自变量和因变量(参数和值)ChartControl

    WinForms Controls > Controls > Chart Control > Fundamentals > Charting Basics > Under ...

  5. VS2010在C盘下生成的.iTrace文件解决办法 ,c盘偷偷的减少,心很烦啊,找了半天才知道是这个问题

    用Visual Studio 2010后发现我的c盘变得越来越小了,刚开始通过优化工具清理c盘,但是无论怎么做都不能将c的内存有效提升,之后一个一个目录的查找之后才知道有个文件夹C:\ProgramD ...

  6. PHP自学1——简单表单提交

    最近自学PHP,顺便做个笔记记录一下自己的学习进度.选用的教程是<PHP and MySQL Web Development 4th Edition>,建议阅读英文教材(我能说英文网上免费 ...

  7. (转)C#DataTable学习心得

    一.DataSet.DataTable.DataRow.DataColumn 1] 在DataSet中添加DataTable DataSet.Tables.Add(DataTable) 实例: Dat ...

  8. poj3122--二分加贪心

    大致题意: 就是公平地分披萨pie 我生日,买了n个pie,找来f个朋友,那么总人数共f+1人 每个pie都是高为1的圆柱体,输入这n个pie的每一个尺寸(半径),如果要公平地把pie分给每一个人(就 ...

  9. C#正则提取HTML中img的url值

    /// <summary> /// 取得HTML中所有图片的 URL. /// </summary> /// <param name="sHtmlText&qu ...

  10. 添加nginx为系统服务(service nginx start/stop/restart)

    1.在/etc/init.d/目录下编写脚本,名为nginx #!/bin/sh # # nginx - this script starts and stops the nginx daemon # ...