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. Spring 3.x企业实用开发实战(1)

    有关Spring的介绍这里就不赘述了,主要是学习了陈雄华版的<Spring 3.x企业应用开发实战>并做了一点笔记,以助于后期的回顾和复习. 废话不多说,直接进入主题,以下所有代码基于&l ...

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

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

  3. Entityframework 伪CodeFirst开发模式应用于Sqlite数据库

    因为最近没有时间深入的研究EntityFramework的内部机制,所以具体的实现并不十分了解.微软最初的初衷是开发出一套通用的数据库访问逻辑,实现对Dal数据访问层的高度封装,其中就用到了工厂模式和 ...

  4. SSRS(rdl报表)分页显示表头和冻结表头

    <TablixRowHierarchy>          <TablixMembers>            <TablixMember>            ...

  5. SQL PROMPT5.3.4.1的一些设置选项

    SQL PROMPT5.3.4.1的一些设置选项 我使用的是5.3.4.1版本 sql prompt这个工具安装好之后就可以在SSMS里使用代码提示功能 园子里非常多的文章:例如SQLSERVER开发 ...

  6. APP-SQLAP-10771

    用户在匹配 PO时,其中一张AP INVOICE不管进行何种更新操作,总是报:APP-SQLAP-10771:Could not reserve record(不能保留记录) 错误. 而且这个发票问题 ...

  7. 通过xib创建控制器

    什么时候才需要使用storyboard,xib,当控制器的view界面是固定死的时候,就考虑用storyboard,xib解决.      目的:让xib描述控制器view          通过xi ...

  8. vb socket的使用

    说明:原本在 csdn 博客 写博客的,因为使用的移动宽带,csdn的 博客无法访问,所以先暂时到博客园写博客了 有能解决移动宽带 有部分网站不能访问的问题,请联系我,QQ 809775607 /** ...

  9. c语言:从一组数据中选出可以组成三角形并且周长最长的三个数(简单)

    题目如下: 思路分析: 写出完整的程序: /* 问题描述: 有n根棍子,棍子i的长度为ai.想要从中选出3根棍子组成周长尽可能长的三角形.请输 出最大的周长,若无法组成三角形则输出0. */ #inc ...

  10. Office 2010 Toolkit and EZ-Activator

    “Office 2010 Toolkit 2.0.1”是“迷你KMS”的更新换代版本.虽然是单一可执行程序,但一身承担两大职能:“KMS服务器”和“客户激活端”.“Office 2010 Toolki ...