首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EF Core增删改查

/子项影响 Cascade(默认) 删除实体 删除实体 ClientSetNull SaveChanges 引发异常 None SetNull 引发 SaveChanges SaveChanges 引发异常...不需要我们额外调用修改方法(因为根本没有Update方法)。 EF Core我们调用 SaveChanges 会把缓存所有更改(增、删、改)都推送给数据库。...从数据库角度来看,EF CoreSaveChanges过程中是以事务形式推送给数据库。如果出错,那么事务就会回滚。 所以一般情况,EF不需要开启事务。...EF Core调用 ToList时候,会将已调用方法和Linq转换成SQL语句,并正式向数据库发起查询。如果出现了Linq中调用三方方法或者自己写工具方法的话,可能会提示不受支持。...如果使用Linq表达式,则没关系,EF Core遇到这种情况时候,会把数据库里所有数据都加载到上下文中,再执行后续查询等操作。

3K20
您找到你想要的搜索结果了吗?
是的
没有找到

.net EF 新手教程

最近学习了.net EF框架,在这里自己总结一用会几种操作。 No.1 准备工作 首先先放上数据库表结构,便于后面的示例操作。...下来我们项目中添加ADO.NET实体数据模型 模型内容根据大家需要进行选择,我在这里选择来自数据库EF设计器,这样他会帮我自动生成数据库EF设计器。...No.3 实体框架状态 状态EF框架中比较重要,如果不了解状态也就无法进行后面的操作,下面我来简单说一几种状态,框架中使用EntityState这个枚举 状态 说明 具备该状态对象 Detached...对象为新对象,并且已添加到对象上下文 使用Add()方法添加对象 Deleted 对象已从上文中删除 使用Remove方法溢出对象 Modified 对象上一个属性已更改 受DbContext管理...,并修改属性对象 这里我一次保存为例,追踪一对象状态,供大家理解,代码如下。

6200

EF Core关系配置

实体状态: 已添加(Added):DbContext正在跟踪此实体,但数据库中尚不存在该实体。...已删除(Deleted):DbContext正在跟踪此实体,并存在于数据库中,但在下次调用 SaveChanges 时要从数据库删除对应数据。...SaveChanges()操作: “已分离”和“未改变”实体SaveChanges()忽略; “已添加实体SaveChanges() 插入数据库; “已修改”实体SaveChanges(...) 更新数据库; “已删除实体SaveChanges() 从数据库删除; 查看实体状态: 使用DbContextEntry()方法来获得实体EF Core中跟踪信息对象EntityEntry...DbContext会根据跟踪实体状态,SaveChanges()时候,根据实体状态不同,生成Update、Delete、Insert等SQL语句,来把内存中实体变化更新数据库中。

6910

Entity Framework中使用存储过程(四):如何为Delete存储过程参数赋上Current值?

如果你看了我提到这篇文章,你可能会问,即使文中介绍关于“逻辑删除场景中,也没有使用当前值得要求呀。...,我们需要先获取一条现有的Contact记录,然后将其标记为删除。...但是,由于Delete存储过程默认使用实体对象初始值,即使你删除之前为Contact对象LastUpdatedBy属性设置了新值,该值也不可能传入到存储过程中去。...具体来说,对于需要删除实体,现设定LastUpdatedBy属性,然后调用AcceptAllChanges方法,然后再调用ObjectStateManagerChangeObjectState方法将状态设置为...最终通过调用SaveChanges方法提交更新,具体代码如下: 1: static void Main(string[] args) 2: { 3: using (EFExtensionsEntities

1.7K100

Entity Framework 简单增删改操作

前言   Entity Framework 简单查询操作 中主要是学习了Entity Framework中几种不同模式查询操作,现在主要来学习一简单增加、删除、修改操作。...增加   EF中添加操作一般有两种方式:一是直接创建对象,然后调用“DbSet””Add()”方法进行添加;二是调用数据库上下文”Entry()”方法并设置对应状态。...此外,含有导航属性时,将一个对象赋值给另一个对象导航属性也能达到添加效果(当导航属性为”DbSet“集合时通过调用导航属性“Add()“方法也同样可以达到添加效果)。...状态跟踪  在这里我们需要强调一点那就是状态跟踪,对于上面的操作如果我们调用“Attach()”方法对实体进行跟踪或者设置实体状态那么数据将不会保存到数据库: ?...相反如果此时设置实体状态为“Modified”则EF执行更新操作。那么既然EF数据修改操作(增加、更新删除)是根据实体状态而进行,那么为什么之前我们增加操作能正常进行而不用手动修改其状态呢?

71831

EntityFramework 外键值映射

如果在 EF OnModelCreating 中配置了实体外键映射,也就是 SQL Server 中 ForeignKey,那么我们添加实体时候,主实体主键值会自动映射到子实体外键值,并且这个操作一个...SaveChanges 中,但如果没有 OnModelCreating 中进行外键映射配置,我们添加实体时候,就不会自动映射外键值了,什么意思呢?...这个问题我之前有点想复杂了,其实解决非常简单,就是 Student 实体添加 virtual 修饰 Class 属性,就可以了,如下: public class Student{ public...Entity Framework 实体框架形成之旅--实体框架开发几个经验总结 在前阵子,我对实体框架进行了一定研究,然后把整个学习过程开了一个系列,逐步深入方式解读实体框架相关技术,期间每每碰到一些新问题需要潜入研究...不过这里我们是以混合式框架进行整合测试,因此实体框架各个方面的调用处理基本上保持一致。

4.1K50

02-EF Core笔记之保存数据

EF Core通过ChangeTracker跟踪需要写入数据库更改,当需要保存数据时,调用DbContextSaveChanges方法完成保存。...(); } 关联数据 EF Core中,除了独立模型外,还有与模型关联数据,这部分数据通过独立模型添加到模型中,SaveChanges时将会持久化到数据库中。...需要注意是,EF Core删除行为仅对已加载数据生效,如果关系未加载到内存中,则超出了EF Core管控范围。 事务 事务允许原子方式处理多个数据库操作。...“原始值”是进行任何编辑之前最初从数据库中检索值。 “数据库值”是当前存储在数据库值。 此处可进行数据合并或用户选择等方式决策如何解决冲突。...,随后再由客户端提交到服务器端,此时实体所在DbContext已发生变化,如何判断对实体进行更新添加就成了一个问题。

1.7K40

Entity Framework 4.1 Code-First 学习笔记

CodeFirst提供了一种先从代码开始工作,并根据代码直接生成数据库工作方式。Entity Framework 4.1在你实体不派生自任何基类、不添加任何特性时候正常附加数据库。...,T 就是实体类型 每一个属性都是读写属性 read/write ( get/set )   在这里,DbContext 基类通过反射来获取映射到数据库实体。...由 SQL Server 每次记录被更新时候维护这个列。为了告诉 EF 实体中有一个属性表示并发标识,你可以通过标签 [ConcurrencyCheck] 来标识这个属性,或者使用模型构建器。...DbSet.SqlQuery:这个方法返回实体将会被 EF 跟踪修改,所以,如果你在这些返回实体上做了修改,当 DbContext.SaveChanges调用时候,将会被处理。...你需要重写 DbContext.SaveChanges获取特定状态实体,实现自己数据操作逻辑来保存修改,然后调用 base.SaveChanges 之前将这些实体状态切换到 Unmodified

1.6K10

C# 数据操作系列 - 5. EF Core 入门

0.前言 上一章简单介绍了一ORM框架,并手写了一个类似ORM工具类。这一章将介绍一个C#世界里大名鼎鼎ORM框架——Entity FrameworkCore版。...Entity Framework 非Core版目前已经更新到了6代,这是一款经过检验ORM框架。...直接使用通过EF获取元素时,EF会自动跟踪哪些字段发生了变化,当手动调用保存时候,EF就会把数据回传给数据库。...然后选择数据库: 这次与之前选择不太一样,这次选择 SQLite这个数据库。这是一个超小型数据库,可以不用安装任何附加软件,只要有一个文件,然后通过代码就可以访问了。.../更新 modelA.Name += DateTime.Now; context.SaveChanges(); //删除 context.Remove(modelA); context.SaveChanges

2.3K10

【asp.net core 系列】9 实战之 UnitOfWork以及自定义代码生成

SaveChanges外移 之前介绍EF Core时候,我们提到过使用EF需要在每次使用之后,调用一次SaveChanges将数据提交给数据库。...实际开发中,我们不能添加一条数据或者做一次修改就调用一次SaveChanges,这完全不现实。...因为每次调用SaveChanges是EF向数据库提交变更时候,所以EF推荐是每次执行完用户请求之后统一提交数据给数据库。...创建一个简单代码生成方法 之前介绍EF时候,有个小伙伴跟我说,还要写配置文件啊,太麻烦了。是的,之前我介绍了很多关于写配置文件不使用特性好处,但不解决这个问题就无法真正体检配置类好处。...那么获取到根目录之后,我们下一步就是获取实体类。

56410

EF简介

EF:EF是 asp.net一套ORM框架....(4)ADO.NET将数据库结果返回给程序 通俗点说,就是ef帮助我们把实体变化翻译成sql语句,然后调用底层ADO.NET保存到数据库中去。...而里面的值就是我们刚才所添加值,说明我们执行完数据库添加操作之后,数据库里面的数据马上将我们所添加数据马上映射给了当前实体对象,所以当我们在下面指定需要修改记录主键时,如果修改和添加共用同一个对象...3、当我们操作完数据库对应表示表实体后,执行dbContext.SaveChanges()后,编译器报一个实体或多个实体验证失败!...这个错误时候,大多数情况,是我们添加字段数据长度超过我们数据库定义字段长度,或者是我们添加字段数据类型和数据库字段类型不一样导致。

1.4K80

RavenDB起步--客户端API(三)

instance session.Delete("ToDoTasks/1-A"); // delete by ID 这里咬住,Delete 方法并不会删除文档,只是将文档会话中标记为删除,只有调用...我们修改或者删除文档后,同样也需要调用SaveChanges 方法来更新 RavenDB,而且利用 Query 查询出来文档会话中也只有一个实例,不管你查询了多少次。...那么就可以调用 Store 方法来将实体和会话绑定在一起,并且它 ID 不是空,RavenDB 认为它以存在于库中,因此将会更新形式存入库中。...SaveChanges() SaveChanges 方法作用是检查所有删除和更改会话状态,然后将这些作为一个事务发送到服务器,因此这就保证了不会因为中途产生异常而部分保存失败。...调用 SaveChanges 方法时,将检查数据库中加载实体和当前实体是否有变动。如果有变动,那么该实体将被保存到数据库中。

86960

Entity Framework 实体状态

我们通过前面的学习,知道EF通过上下位负责跟踪实体状态,实体状态位置是命名空间 System.Dat.Entity 里 EntityState,具体状态有如下5种: Detached Unchanged...Added Deleted Modified 下面我们分辨来讲解一 零、Detached 有时候我们只需要实体显示,而不需要实体更新,为了提高性能,我们就就不需要EF上下文对实体进行跟踪,这个时候我们就用到了...一、Unchanged 在这个状态实体被上下文追踪,但是数据库值没有发生任何改变。...(); } 三、Deleted 如果需要将实体数据库删除,可以使用 Deleted 状态,当调用 SaveChanges 方法时数据将会从数据库删除。...当我们修改数据时,需要用到 Modified 状态,当调用 SaveChanges 方法时数据将会修改数据库数据。

82410

Entity Framework中使用存储过程(三):逻辑删除实现与自增长列值返回

本篇文章通过实例方式,讨论两个EF使用存储过程主题:如何通过实体和存储过程映射实现逻辑删除;对于具有自增长类型主键数据表,进行添加操作时候如何将正确值反映在实体对象上。...将结果列于实体属性进行绑定 一、基于逻辑删除数据表和存储过程定义 较之物理删除(记录彻底从数据表中清除掉),逻辑删除则继续保留该数据,只是为之进行一个删除标记,表明该记录已经被“删除”了。...在当前实体被选中情况,进入Mapping Details界面,你会发现在于数据库映射中具有一个下拉框,通过该下拉框你可以设置基于数据库表相关列筛选条件。...并在删除前后根据ID获取对应记录,打印出来验证上面设计筛选条件是否真的有效。...三、具有自增长列存储过程定义 接下来我们来讨论另一个常见场景:如果一个表中存在一个自增长列作为该表主键,当我们通过提交对应实体对象进行记录添加操作时,数据库中真正键值如何返回并赋值给该实体对象

1.7K80

Entity Framework 并发冲突解决方案

最后我们实体类对应 Map 文件构造函数中添加如下代码即可: Property(p => p.RowVersion).IsRowVersion(); 这样每次提交修改请求时 Entity Framework...我们需要调用集合中每个对象 Reload 方法将数据库中最新值放在内存中。这样后续实体值将和数据库保持一致。完成这一步后,我们可以重新向数据库提交更新数据。...讲解这个问题前我们先来了解一 Entity Framework 原始值和更新数据库值以及当前值从哪里获得。...item.GetDatabaseValues().ToObject(); // 当前值 var nv = item.CurrentValues.ToObject(); } } 从上面的代码中我们可以看到获取这三种值我们依然是从并发异常类...函数来处理异常并正确解决冲突,最后调用 SaveChanges 方法重试提交数据。

81620

asp.net mvc 简单项目框架搭建过程(一)对Bll层和Dal层进行充分解耦

开始搭框架之前,先做一些准备工作: (1)新建解决方案: 新建一个解决方案,然后解决方案间五个文件夹,分别为 Common、Bll、Dal、Model、UI.如下图所示: (说明:我项目命名为...(2)Model层中新建类库 Model,然后添加EF数据库实体   添加实体操作我就不啰嗦了,我以前博客有讲到。结果如下: ?...上面的代存在一几个方面的问题:(很通俗化语言描述,不写菜鸟看不懂的话) (1)首先,UserDal中对数据库进行操作首先要做就是实例化上下文。...改进1:Dal层和Bll层之间添加接口层IDal,以后调用XXXDal时候,使用IXXXDal进行调用,这样就用接口层把两个层隔离开来了: 具体做法: IotPf.IDal新建接口文件IUserDal.cs...具体做法: 首先,Uiweb.config文件中此处添加如下代码: ?

92520

.NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记

2.4.6 EF Core -- 更新 状态 自动变更检测 不查询删除更新 并发 状态 Entity State Property State Entity State Added 添加 Unchanged...删除之前先查询 var id = 1; using(var db = new entityContext()) { var entity = db.dbset.FirstOrDefault(e...(); } } catch(DataException) { } 并发 乐观处理:系统认为数据更新大多数情况是不会产生冲突,只在数据库更新操作提交时候才对数据作冲突检测(推荐...) 悲观处理:根据命名即对数据库进行操作更新时,对操作持悲观保守态度,认为产生数据冲突可能性很大,需要先对请求数据加锁再进行相关操作 Entity 中添加行版本号字段 /// <summary...,如果更新时候查询版本号与之前版本号不一致,就会报错 UpdateAsync 方法中查询和更新中间如果数据库行版本号发生了修改,就会报错 ProjectController [HttpPut

58720
领券