DbContext是实体类和数据库之间的桥梁,DbContext主要负责与数据交互,主要作用:

1、DbContext包含所有的实体映射到数据库表的实体集(DbSet < TEntity >)。

2、DbContext 将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。

3、更改跟踪: 它跟踪每个实体从数据库中查询出来后发生的修改变化。

4、持久化数据: 它也基于实体状态执行插入、更新和删除操作到数据库中。

DbContext中的DbSet

DbSet表示上下文中指定类型的所有实体的集合或可从数据库中查询的指定类型的所有实体的集合。

DbSet常用方法

TestDBContext tdb = new TestDBContext();

Add(Entity)/AddRange

return添加

的Entity

添加实体到context中,并给实体标记Added状态

tdb.Persons.Add(entityModel);

 AsNoTracking<Entity>   

获取一个不被context缓冲和追踪的序列,多用于只读序列

var personList = tdb.Persons.AsNoTracking<Person>().ToList<Person>();

 Attach(Entity)

return添加

的Entity

将实体添加到context上下文中

tdb.Persons.Attach(entityModel);

 Find(int)

return对应id

的Entity

通过主键获取实体对象,如果在数据库和context中不存在那么返回null,注:会返回在context中存在但还没写入数据库的实体对象

Person personEntity = tdb.Persons.Find(1);

 Include  

include必须是外键连接,且立即执行;join连接不需要外键,延时执行

var personList = tdb.Persons.Include("PersonName").ToList<Person>();

var personList= tdb.Persons.Include(s => s.PersonName).ToList<Person>();

 Remove/RemoveRange

retrun删除

的entity

删除实例,并给实例对象添加deleted标记

tdb.Persons.Remove(EntityModel);

 SqlQuery  

通过sql获取实例集合,默认返回的集合是被追踪的,可以使用AsNoTracking()取消追踪

var personEntity = tdb.Persons.SqlQuery("select * from T_Person where id = 1").FirstOrDefault<Person>();

在EF中实体的五种状态:

1.detached:实体不在上下文的追踪范围内,如刚new的实体,可以通过Attach()添加到上下文,此时状态为unchanged。

2.unchanged:未改变,如刚从数据库读取出来的实体。

3.added:添加状态,一般执行Add/AddRange时标记为added。因为新对象在数据库中没有记录,所以不能转为deleted和modified状态。

4.deleted:删除状态,一般执行Remove/RemoveRange时标记为deleted,不能转换为added状态。

5.modified:修改状态,改变了实体的属性会处于这个状态,能转为deleted状态,不能转换为added状态。

EF如何判断状态

为当前对象(需要追踪的)创建一个DbEntityEntry对象,此对象包含:

Current Value(当前值)/Original Value(原始值)/Database Value(数据库里的值)

只需要比较这三个值,很容易就知道哪些属性被修改了。

设置context.Configuration.AutoDetectChangesEnabled = false则不会去追踪,默认是true。

也可以自己指定状态:

EF中的上下文(DbContext)简介的更多相关文章

  1. 5.翻译:EF基础系列---EF中的上下文类

    原文地址:http://www.entityframeworktutorial.net/basics/context-class-in-entity-framework.aspx EF中的上下文类是一 ...

  2. Entity Framework入门教程(3)---EF中的上下文简介

    1.DbContext(上下文类) 在DbFirst模式中,我们添加一个EDM(Entity Data Model)后会自动生成一个.edmx文件,这个文件中包含一个继承DbContext类的上下文实 ...

  3. 在EntityFramework6中管理DbContext的正确方式——3环境上下文DbContext vs 显式DbContext vs 注入DbContext(外文翻译)

    (译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...

  4. 14.翻译系列:从已经存在的数据库中生成上下文类和实体类【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/code-first-from-existing-database.aspx EF 6 ...

  5. 在 ef 中执行 DbContext.Table.AddRange(Enitites).ToList() 会发生什么

    在 ef 中执行 DbContext.Table.AddRange(Enitites).ToList() 会发生什么 昨天和朋友摸鱼,无意之间聊到了执行 DbContext.Table.AddRang ...

  6. 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...

  7. 2.EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  8. EF中逆变和协变

    EF中的增删改查: 实现步骤: 1.声明一个EF的上下文. bjhksjEntities dbContext = new bjhksjEntities(); 2.声明一个实体. HKSJ_USERS ...

  9. Entity Framework入门教程(5)---EF中的持久化场景

    EF中的持久性场景 使用EF实现实体持久化(保存)到数据库有两种情况:在线场景和离线场景. 1.在线场景 在线场景中,context是同一个上下文实例(从DbContext派生),检索和保存实体都通过 ...

随机推荐

  1. 【spring boot】SpringBoot初学(8)– 简单整合redis

    前言 到目前为止,把项目中需要用到的:properties读取.数据源配置.整合mybatis/JdbcTemplate.AOP.WebService.redis.filter.interceptor ...

  2. 剑指offer-面试题38-字符串的排列-全排列

    /* 题目: 输入字符串,打印字符串的所有排列. 输入acc,输出[acc, cac, cca]. */ /* 思路: 将字符串看作两部分,第一个字符串和后面的部分. 将第一个字符串与后面字符串依次交 ...

  3. opencv —— copyMakeBorder 扩充图像边界

    扩充图像边界:copyMakeBorder 函数 在图像处理过程中,因为卷积算子有一定大小,所以就会导致图像一定范围的边界不能被处理,这时就需要将边界进行适当扩充. void copyMakeBord ...

  4. C语言程序设计(实验一)

    实验项目:1.3.2,1.3.3,1.3.4,2.3.1,2.3.2 姓名:邹琼   实验地点:家 实验时间:2020年2月28日 一.实验目的与要求 1.实验目的 掌握DEVC++的安装方法,并实现 ...

  5. PS_0002:改变曲线,改变色阶

    1,ctrl + m  改变曲线 2,ctrl + l  改变色阶

  6. Codeforces Round #622(Div 2)C2. Skyscrapers (hard version)

    题目链接 : C2. Skyscrapers (hard version) 题目描述 : 与上一道题类似,只是数据范围变大, 5e5, 如果用我们原来的方法,铁定是超时的. 考察点 : 单调栈,贪心, ...

  7. Yarn报错:Exception message: /bin/bash: line 0: fg: no job control

    Exception message: /bin/bash: line 0: fg: no job control 这个错误是 本地idea跨平台远程调试hadoop集群出现的,在使用windows调用 ...

  8. iptables (二) nat & tcp_wrapper

    一.nat 之前网络防火墙的示例中,如果内网是私网地址,那么内网主机如何与外网通信呢? 这时候,iptables要实现内网和外网通信,有两种方式: nat: Network Address Trans ...

  9. 多线程模式下高并发的环境中唯一确保单例模式---DLC双端锁

    DLC双端锁,CAS,ABA问题 一.什么是DLC双端锁?有什么用处? 为了解决在多线程模式下,高并发的环境中,唯一确保单例模式只能生成一个实例 多线程环境中,单例模式会因为指令重排和线程竞争的原因会 ...

  10. A Bug's Life HDU - 1829 种类并查集

    //有n个成员,并查集开两倍空间 //1~n为一组, n+1~2n为一组.a与b互斥,则a与b反(即b+n)为同一集合, //同时b与a反(a+n)为同一集合 //在union操作中,引入w ,w越大 ...