实体框架中 SaveChanges() 返回 0 值的原因

问题描述 投票:0回答:2

如何找到DbContextSaveChanges()方法返回0值的原因?

当我尝试向数据库表添加记录时,SaveChanges()方法仅返回 0。

有什么办法可以找出记录没有添加、更新或删除的原因吗?

c# entity-framework
2个回答
3
投票

SaveChanges 方法返回受影响的行数。但是您可以使用

DbContext.Database.Log
属性创建日志并查看发送到数据库的内容(假设您的代码没问题)。无论如何,很高兴看到我们发送到数据库的内容:

using (var context = new Context()) 
{ 
    context.Database.Log = Console.Write; 

    // your code
}

DbContext.Database.Log 属性可以设置为任何采用字符串的方法的委托。最常见的是,通过将其设置为该 TextWriter 的“Write”方法,将其与任何 TextWriter 一起使用。当前上下文生成的所有 SQL 都将记录到该编写器。

在这里您可以找到更多doc


0
投票

在一个遗留项目中,我很惊讶 SaveChanges 总是返回 0,尽管记录已添加到数据库中。事实证明,在大型代码库中隐藏的某个地方,利用上下文是分部类这一事实对数据库上下文进行了扩展。这为 SavingChanges 事件添加了一个事件处理程序。该事件处理程序提前保存上下文,以在保存数据后检查某些数据一致性规则。 SaveChanges 的返回值是在该处理程序执行后确定的,并且不需要保存更多数据,因此返回值始终为 0。

© www.soinside.com 2019 - 2024. All rights reserved.