EF中的上下文(DbContext)简介
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)简介的更多相关文章
- 5.翻译:EF基础系列---EF中的上下文类
原文地址:http://www.entityframeworktutorial.net/basics/context-class-in-entity-framework.aspx EF中的上下文类是一 ...
- Entity Framework入门教程(3)---EF中的上下文简介
1.DbContext(上下文类) 在DbFirst模式中,我们添加一个EDM(Entity Data Model)后会自动生成一个.edmx文件,这个文件中包含一个继承DbContext类的上下文实 ...
- 在EntityFramework6中管理DbContext的正确方式——3环境上下文DbContext vs 显式DbContext vs 注入DbContext(外文翻译)
(译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...
- 14.翻译系列:从已经存在的数据库中生成上下文类和实体类【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/code-first-from-existing-database.aspx EF 6 ...
- 在 ef 中执行 DbContext.Table.AddRange(Enitites).ToList() 会发生什么
在 ef 中执行 DbContext.Table.AddRange(Enitites).ToList() 会发生什么 昨天和朋友摸鱼,无意之间聊到了执行 DbContext.Table.AddRang ...
- 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...
- 2.EF中 Code-First 方式的数据库迁移
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...
- EF中逆变和协变
EF中的增删改查: 实现步骤: 1.声明一个EF的上下文. bjhksjEntities dbContext = new bjhksjEntities(); 2.声明一个实体. HKSJ_USERS ...
- Entity Framework入门教程(5)---EF中的持久化场景
EF中的持久性场景 使用EF实现实体持久化(保存)到数据库有两种情况:在线场景和离线场景. 1.在线场景 在线场景中,context是同一个上下文实例(从DbContext派生),检索和保存实体都通过 ...
随机推荐
- PostgreSQL内核学习笔记四(SQL引擎)
PostgreSQL实现了SQL Standard2011的大部分内容,SQL处理是数据库中非常复杂的一部分内容. 本文简要介绍了SQL处理的相关内容. 简要介绍 SQL文的处理分为以下几个部分: P ...
- Mysql连接字符,字段函数concat()
Mysql连接字符,字段函数concat() 可将多个字符串或字段连接,多个参数以逗号隔开 select concat('现在是:',new_date) from work
- 安装SSDB注意事项
遇到的问题 安装SSDB时 make编译失败 wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip ...
- 剑指offer-面试题40-最小的k个数-最大堆
/* 题目: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. */ /* 思路: 利用最大堆,C++中使用multiset& ...
- Maximum Element In A Stack Gym - 102222A【思维+栈】
2018-2019 ACM-ICPC, China Multi-Provincial Collegiate Programming Contest https://vjudge.net/problem ...
- Spring MVC 定时任务注解说明
一.注解说明. Spring 自带的定时任务执行@Scheduled注解,可以定时的.周期性的执行一些任务.查看@Scheduled的注解可以看到有以下三种: 1.1 String cron() de ...
- D - Counting Squares
Your input is a series of rectangles, one per line. Each rectangle is specified as two points(X,Y) t ...
- cocos studio 中交互性
cocos studio 属性->常规->交互性,勾选之后相当于代码中的setTouchEnabled(true)
- 最简单的githut操作命令
创建SSH Key: 参考:https://blog.csdn.net/weixin_30345055/article/details/95139358 在用户目录下,看看有没有.ssh文件夹,如果有 ...
- 541-反转字符串 II
541-反转字符串 II 给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转.如果剩余少于 k 个字符,则将剩余的所有全部反转.如果有小于 2k 但大于或等 ...