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 为基础所发展出来的对 ...
随机推荐
- 访问动态链接库中的C++类和资源
面我们来介绍如何访问动态链接库中的C++类和资源.其具体操作步骤如下:(1)创建一个基于对话框的工程,工程名称为“AccessDll”.设计对话框资源如图1所示. 图1 对话框资源设计窗口(2)定义 ...
- Docker简单介绍
Docker简单介绍 Docker是一个能够把开发的应用程序非常方便地部署到容器的开源引擎.由Docker公司团队编写,基于Apache 2.0开源授权协议发行.Docker的主要目的例如以下: 提供 ...
- BNUOJ27873:A Special "Happy Birthday" Song!!!
There are n people (excluding myself) in my 30th birthday party. They sing the traditional "hap ...
- bootstrap的导航改造
在使用bootstrap制作后台时用到了响应式导航条,其中dropdown组件更是用的比较多,用的多需要点击的就多,dropdown默认鼠标左键单击才展开,如果使用鼠标放上去(hover)就展开则会省 ...
- [hadoop]Cannot create directory /mdrill/tablelist/fact_seller_all_d. Name node is in safe mode.
在执行mdrill创建表的时候报如下异常(蓝色部分为关键): [mdrill@hadoop1101 bin]$ ./bluewhale mdrill create ./create.sql higo ...
- Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool
原因:缺少commons-pool-X.jar包,到http://commons.apache.org/proper/commons-pool/download_pool.cgi下载后引入即可(地址可 ...
- 【转】java jawin api 中文 invoke方法
org.jawin Class FuncPtr java.lang.Object org.jawin.FuncPtr ----------------------------------------- ...
- js计时器。
<html> <head> <title> Nonove js clock 时钟 </title> <script type="text ...
- Some good questions
(一)#include <stdio.h>#include <stdlib.h>void getmemory(char *p){ p=(char *) malloc(100); ...
- win7_32位安装MySQL_5.6以及密码修改方法
1.下载mysql: http://www.xiazaiba.com/html/361.html 2.安装 方便起见,全部默认下一步吧,原理一个样,最后安装到: 3.配置环境变量 我这里添加的是 C ...