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

当我调用SaveChanges时,没有任何东西保存回数据库吗?

当调用SaveChanges方法时,Entity Framework Core会将对上下文所做的更改保存回数据库。如果调用SaveChanges后没有任何东西保存回数据库,可能有以下几种可能的原因:

  1. 没有进行任何更改:在调用SaveChanges之前,需要确保对上下文中的实体进行了修改、添加或删除操作。如果没有进行任何更改,调用SaveChanges将不会有任何效果。
  2. 未正确配置实体映射:在使用Entity Framework Core时,需要确保实体类与数据库表之间的映射关系正确配置。如果映射关系不正确,SaveChanges可能无法将更改保存回数据库。请检查实体类的属性与数据库表的列是否匹配,并确保在上下文的OnModelCreating方法中正确配置实体映射。
  3. 未启用自动跟踪更改:默认情况下,Entity Framework Core会自动跟踪对实体的更改。但是,如果在上下文中禁用了自动跟踪更改功能,调用SaveChanges将不会保存任何更改。可以通过在上下文的构造函数中设置ChangeTracker.AutoDetectChangesEnabled属性来启用自动跟踪更改。
  4. 事务回滚:如果在调用SaveChanges之前启动了一个事务,并且在SaveChanges之后回滚了该事务,那么对数据库的更改将不会被保存。请确保没有在SaveChanges之前回滚事务。

如果以上情况都不是问题的原因,可能需要进一步调试和排查。可以使用调试器检查SaveChanges方法的返回值,查看是否有任何错误或异常抛出。此外,还可以查看数据库连接是否正确配置,并确保数据库服务器正常运行。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)

Added 对象为新对象,并且已添加到对象上下文,但尚未调用 SaveChanges 方法。 在保存更改后,对象状态将更改为 Unchanged。...在不带更改跟踪代理的 POCO 实体中,调用 DetectChanges 方法,已修改属性的状态将更改为 Modified。 在保存更改后,对象状态将更改为 Unchanged。...所以,我们在对应多个ObjectContext实例进行操作要注意,调用实例自己的SaveChanges()方法,它只会对自己实例内存空间的操作映射回数据库,而其他ObjectContext实例中的实体集合的修改都不受影响...而且EF自动帮我们做了缓存的处理,当我们第一次查询某个实体它会自动帮我们从数据库取出数据,并装配成实体类交给我们开发人员,当第二次获取相同数据,它会先从缓存中查找,如果已经存在数据了就立即返回,不会查询数据库...//手动修改实体的状态 schoolDB.ObjectStateManager.ChangeObjectState(student, EntityState.Modified); //保存数据库

78130

EF简介

(4)ADO.NET将数据库结果返回给程序 通俗点说,就是ef帮助我们把实体的变化翻译成sql语句,然后调用底层的ADO.NET保存数据库中去。...1、当使用上下文操作数据库,被操作表必须含有主键,否则回报错。...错误的原因我们来分析下: 经过调试代码我们发现,当我们第一次new T_ConsultingList对象,这个对象为空,当我们使用ef添加完数据后,再去观察这个对象我们会发现,这个对象里面已经有值了,...而里面的值就是我们刚才所添加的值,说明在我们执行完数据库添加操作之后,数据库里面的数据马上将我们所添加的数据马上映射给了当前的实体对象,所以当我们在下面指定需要修改的记录的主键,如果修改和添加共用同一个对象...3、当我们在操作完数据库对应的表示表实体后,执行dbContext.SaveChanges()后,编译器报一个实体或多个实体验证失败!

1.4K80

Entity Framework Core 捕获数据库变动

在实际项目中我们往往需要记录存储在数据库中数据的变动(例如修改数据前记录下数据的原始值),这样一来在发生误操作可以将数据恢复到变动前的状态,也可以追溯到数据的修改人。...在将上述信息转换成 Audit 提示我们对被操作前的数据和被操作后的数据进行了一个长度判断,这是因为当我们新增数据的时候是没有旧数据的,当我们对数据没有进行任何更改就提交数据的时候是不存在新数据的。...,例如当前日期、Id等,这些值需要等待 SaveChanges 方法执行完毕后方可获得,也就是说在这种情况下保存审计数据必须在 SaveChanges 方法之后。...三、总结 通过前面的代码示例和讲解,我们就可以解答前面提出的两个问题了,除了部分数据是由数据库自动生成的情况下,大部分情况下在调用SaveChanges方法之前,我们通过上下文中的ChangeTracker...属性来获取旧值和新值并保存

56310

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

我们修改或者删除文档后,同样也需要调用SaveChanges 方法来更新 RavenDB,而且利用 Query 查询出来的文档在会话中也只有一个实例,不管你查询了多少次。...SaveChanges 方法后,数据才会真正的保存在 RavenDB 中,并且对于新增来说,RavenDB 会为新实体提供一个 ID。...除了保存新实体外,Store 还可以将现有文档实体与会话相关联,这种情况一般用在服务武器将实体发送给客户端,客户端修改实体后再发送回 Web 应用程序。但这时发现它没有被会话加载也没有被跟踪。...SaveChanges() SaveChanges 方法的作用是检查所有删除和更改的会话状态,然后将这些作为一个事务发送到服务器,因此这就保证了不会因为中途产生异常而部分保存失败。...调用 SaveChanges 方法,将检查数据库中加载的实体和当前的实体是否有变动。如果有变动,那么该实体将被保存数据库中。

87760

02-EF Core笔记之保存数据

EF Core通过ChangeTracker跟踪需要写入数据库的更改,当需要保存数据调用DbContext的SaveChanges方法完成保存。...(); } 关联数据 在EF Core中,除了独立的模型外,还有与模型关联的数据,这部分数据通过独立模型添加到模型中,在SaveChanges将会持久化到数据库中。...事务 事务允许以原子方式处理多个数据库操作。 如果已提交事务,则所有操作都会成功应用到数据库。 如果已滚事务,则所有操作都不会应用到数据库。...默认情况下,每次SaveChanges方法的所保存的所有更改都将在一个事务中,要么全部保存成功,要么全部保存失败。此种情况已能满足大多数应用的需要。...工作原理:每当在 SaveChanges 期间执行更新或删除操作,会将数据库上的并发令牌值与通过 EF Core 读取的原始值进行比较。如果一致则可以完成操作,如果不一致,则终止事务。

1.7K40

浅析Entity Framework Core中的并发处理

即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现.读取出数据,将此版本号一同读出,之后更新,对此版本号加一。...如果一个属性被配置为并发令牌,则EF将在保存这条记录,会检查没有其他用户修改过数据库中的这个属性的值。...EF使用了乐观并发策略,这意味着它将假定值没有改变,并尝试保存数据,但如果发现值已更改,则抛出异常。 举个例子,我们有一个用户类(User),我们配置 User中的 Name为并发令牌。...当我们配置好上面的并发令牌,在EF执行SaveChanges()操作并产生并发的时候,我们会得到DbUpdateConcurrencyException的异常信息,(注意:在不配置并发令牌,这个异常一般不会触发...注意:这里的例子是根据乐观并发处理策略要进行处理的.你可以根据你的业务,来任意处理当前值,原始值和数据库值,选择你需要的值保存.

2.7K90

Entity Framework 简单增删改操作

增加   在EF中添加操作一般有两种方式:一是直接创建对象,然后调用“DbSet”的”Add()”方法进行添加;二是调用数据库上下文的”Entry()”方法并设置对应的状态。...此外,在含有导航属性,将一个对象赋值给另一个对象的导航属性也能达到添加的效果(当导航属性为”DbSet“集合时通过调用导航属性的“Add()“方法也同样可以达到添加效果)。...状态跟踪  在这里我们需要强调一点那就是状态跟踪,对于上面的操作如果我们调用“Attach()”方法对实体进行跟踪或者设置实体的状态那么数据将不会保存数据库: ?...这两句添加任何一句效果都是一样的,就是都没有保存数据库中。...原因是EF会自动发现状态改变,在调用下面的方法状态发现是自动的:   ?

72431

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

如果在 RavenDB 中没有找到指定的文档,那么字典中文档的 ID 值为 null。...那么这时又有同学问了,我不保存 Person ,调用 person.Id 不就报错了吗?...其实这个问题完全不必担心,当我调用 session.Store(person) 后,RavenDB 客户端已经为 Perosn 的 Id 属性赋予了一个唯一值 ,因此在调用 person.Id 不会出错...那么,现在我们知道了该如何保存多个文档了,下面我们就来看看如何将相关连的文档查询出来。 在 RavenDB 中其实是没有咱们常说的外键关系的,对另一个文档的引用只是一个字符串的属性。...这时,当我调用 Load 方法来获取 Person 文档,因为会话缓存中已经存在了这个文档,因此不会再去查询 RavenDB ,而是直接返回数据。

1.1K30

C# 数据操作系列 - 8. EF Core的增删改查

而删除,如果在配置导航属性没有设置级联删除,删除当前元素,如果另一端的外键是可空类型的,并不会删除导航属性另一端的元素只会设置外键指向为NULL,如果另一端外键是不可空的,那么就会同时删除。...不需要我们额外的调用修改方法(因为根本没有Update方法)。 EF Core在我们调用 SaveChanges 会把缓存的所有更改(增、删、改)都推送给数据库。...如果有一条数据变更因为数据库校验或者其他约束没有通过,就会报错,同时撤销所有已推送的变更并取消后续变更的推送。...从数据库的角度来看,EF Core在SaveChanges的过程中是以事务的形式推送给数据库的。如果出错,那么事务就会滚。 所以一般情况下,EF不需要开启事务。...EF Core在调用 ToList的时候,会将已调用的方法和Linq转换成SQL语句,并正式向数据库发起查询。如果出现了在Linq中调用三方方法或者自己写的工具方法的话,可能会提示不受支持。

3K20

【我们一起写框架】领域驱动设计的CodeFirst框架(一)—序篇

虽然,我们有了CodeFirst这样优秀的框架,但那只是针对使用者,而对设计者而言,CodeFirst并没有减少设计逻辑。所以,想学会领域驱动设计,还是要有一点耐心,并花一点间,付诸于实践。...原因是这样的,没有显示映射处理的属性,会默认映射到同名的数据表字段上;所以这里节省了一些代码量。...: base("name=DateBaseContext") { this.Configuration.ValidateOnSaveEnabled = true;//保存验证...当ProxyCreationEnabled属性设置为True,我们一旦运行系统,系统会自动的,数据模型同步到数据库,并且会创建一个__MigrationHistory表,来记录同步的内容。...SaveChanges就是调用Database的SaveChanges方法来保存数据的修改,当然,我们对该方法进行了一些封装,让他更饱满一些。

54430

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

(2)其次,UserDal中的这几个方法是最最常用的方法,几乎每个XXXDal中都会用到这四个方法,那我们就在每个XXXDal中都写一遍?...我们应该都知道的,如果我们操作上下文对数据库进行了 增、删、改的操作,那么操作结束后需要有一个 context.SaveChanges()的操作,用来把对实体的修改保存数据库中。...UserDal中的方法,分别对数据库进行了三次不同的操作,每次操作之后相应的都会执行一次context.SaveChanges()的操作,也就是说与数据库交互了三次。...有没有觉得三次有点多了呢,明明可以更少的呀,以后如果代码量大了,可能会交互更多次,那性能就很差了呀。...,便于应对数据库的更换,提高框架灵活性; (4)使用DbSession将数据库保存操作的权限有Dal层提交到业务逻辑层,减少与数据库交互次数,提高代码性能; 下一篇将介绍spring.net的使用,虽然我自己也不咋会

93920

5个EF core性能优化技巧,让你程序健步如飞

; 3、正确使用Find(id=10)来代替FirstOrDefault(t=>t.id=10) Find会优先查询缓存,当前面已经查询过这条数据的时候使用,而FirstOrDefault每次都会查询数据库...4、禁用实体追踪 当我们从数据库中查询出数据,上下文就会创建实体快照,从而追踪实体。在调用 SaveChanges ,实体有任何更改都会保存数据库中。...但是当我们只需要查询出实体而不需要修改时(只读),实体追踪就没有任何用途了。这时我们就可以调用 AsNoTracking 获取非追踪的数据,这样可以提高查询性能。...db.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; 这样就把所有表查询设置成了非追踪状态 5、使用 .Any(),尽量不使用 判断查询出的列表是否有值

2.3K50

IdentityServer(14)- 使用EntityFramework Core配置和操作数据

当您使用IdentityServer4.EntityFramework并随着时间的推移升级,您将负责自己的数据库Schema以及实体类更改所需的更改。...保存并关闭文件。 为了测试你已经正确安装了这些工具,你可以在项目所在的目录下打开一个命令shell并运行dotnet ef。 它应该是这样的: ?...这就是我们的DbContext类可以用你想要使用的数据库提供程序来配置。 在这种情况下,通过调用UseSqlServer,我们正在使用SqlServer。 你也可以知道,这是提供连接字符串的地方。...UseSqlServer中的“options”调函数是配置定义EF迁移的程序集的方法。 EF需要使用迁移来定义数据库的Schema。...运行程序 您现在应该能够运行任何现有的客户端应用程序并登录,获取令牌并调用API - 全部基于数据库配置。

1.9K30

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

在直接使用通过EF获取的元素,EF会自动跟踪哪些字段发生了变化,当手动调用保存的时候,EF就会把数据传给数据库。...然后选择数据库: 这次与之前的选择不太一样,这次选择 SQLite这个数据库。这是一个超小型的数据库,可以不用安装任何附加软件,只要有一个文件,然后通过代码就可以访问了。...如果项目根目录里没有 blogging.db 这个SQLite文件的话,会自动创建该文件,同时设置好表;如果有,但不是SQLite的文件,则会报错。...();//保存数据到数据库中 //查询 var modelA = context.ModelAs.Where(p => p.Id > 1).First(); //更新 modelA.Name += DateTime.Now...; context.SaveChanges(); //删除 context.Remove(modelA); context.SaveChanges(); context.Dispose(); 这里简单的演示了一下如何使用

2.4K10

Entity Framework 并发冲突解决方案

我们需要调用集合中每个对象的 Reload 方法将数据库中最新的值放在内存中。这样后续的实体值将和数据库保持一致。完成这一步后,我们可以重新向数据库提交更新数据。...1.客户端获胜 当调用 SaveChanges 方法,如果存在并发冲突将会引发 DbUpdateConcurrencyException 异常,那么这个时候我们将调用 handleDbUpdateConcurrencyException...函数来处理异常并正确解决冲突,最后在调用 SaveChanges 方法重试提交数据。...2.数据库获胜 如果你想让数据库获胜,那就简单了。再发生异常不需做任何处理,只返回方法的返回值即可。...,王五因为并发冲突且异常捕获后没有进行任何处理而不会存入数据库

82020

EF Core利用Transaction对数据进行滚保护

首先,说一下什么是EF Core中的Transaction Transaction允许以原子方式处理多个数据库操作,如果事务已提交,则所有操作都应用于数据库,如果事务滚,则没有任何操作应用于数据库。...所谓原子方式 是指对数据库的每一个操作是对立开来的,但是多个操作能合成一个整体(个人理解)。 当操作到某一步失败了,那么会触发事物的滚,把前面成功的操作也进行撤销,为什么这一操作这么重要呢?...程序成功启动后,我们调用数据初始化接口,效果如图: 有了数据后,我们调用转账接口进行转账操作,如图: 进行转账操作,在A的账户成功减掉10元后,在B的账户加上10元保存,由于我们设置了异常,程序跳出了...为什么A的账户明明执行了减去10元的操作,而最后没有生效呢?...原来是在执行transaction.Commit()之前,程序遇到异常了,它会自动调用transaction.Rollback()进行数据滚,撤销A的减去10元这一操作。 Benefit?

1.5K50
领券