C# DbContext日志未拦截SaveChanges()生成的SQL
来自MSDN的文章介绍了如何使用Log属性记录SQL,包括EF6+的C# DbContext日志未拦截SaveChanges()生成的SQL,c#,linq-to-entities,dbcontext,entity-framework-6.1,C#,Linq To Entities,Dbcontext,Entity Framework 6.1,来自MSDN的文章介绍了如何使用Log属性记录SQL,包括EF6+的SaveChanges()方法生成的SQL 我试图截取从DbContext继承的上下文类中生成的所有sql。除了SaveChanges()方法生成的SQL之外,截取对任何东西都可以正常工作 DbContext.Database.Log是用于记录此日志的正确属性吗? using (Context c = new Context()) { //setup logging to debugger c.Database.
SaveChanges()
方法生成的SQL
我试图截取从DbContext继承的上下文类中生成的所有sql。除了SaveChanges()方法生成的SQL之外,截取对任何东西都可以正常工作
DbContext.Database.Log是用于记录此日志的正确属性吗?
using (Context c = new Context())
{
//setup logging to debugger
c.Database.Log = s => Debug.WriteLine(s);
//generate query
var query = c.SomeTable.Where(x => x.Abc == "A" && x.Zyx == "Z");
//enumerate query - generated SQL is logged to debugger correctly
var items = query.ToList();
//modify entities
items.ForEach(t => t.Timestamp = DateTime.Now);
//get number of changed entities: Outputs "Number of Changed Entities: 3"
var changedEntries = c.ChangeTracker.Entries().Where(e => e.State != EntityState.Unchanged);
Debug.WriteLine("Number of Changed Entities: {0}", changedEntries.Count());
//save changes - generated SQL is NOT logged to debugger
c.SaveChanges();
}
是否有其他方法记录SaveChanges()方法生成的SQL?
using (Context c = new Context())
{
//setup logging to debugger
c.Database.Log = s => Debug.WriteLine(s);
//generate query
var query = c.SomeTable.Where(x => x.Abc == "A" && x.Zyx == "Z");
//enumerate query - generated SQL is logged to debugger correctly
var items = query.ToList();
//modify entities
items.ForEach(t => t.Timestamp = DateTime.Now);
//get number of changed entities: Outputs "Number of Changed Entities: 3"
var changedEntries = c.ChangeTracker.Entries().Where(e => e.State != EntityState.Unchanged);
Debug.WriteLine("Number of Changed Entities: {0}", changedEntries.Count());
//save changes - generated SQL is NOT logged to debugger
c.SaveChanges();
}
更新
我找到了问题所在。我使用的是一个从DBContext派生的上下文,它重写了SaveChanges()方法。在被重写的方法中,它将DbContext.Database.Log重新路由到字符串生成器,而不是调试器。从DbContext派生的上下文正在重写SaveChanges()方法。在重写的方法中,它将DbContext.Database.Log重新路由到字符串生成器,而不是调试器。我认为它实际上没有保存任何内容<代码>时间戳通常是映射为
计算的
的属性,因此不会更新。尝试更新一些其他属性。我检查了,它确实更新了行。我可以看到上下文包含已更改的实体,当我调用savechanges时,这些更改会传播到数据库中。当然,我也尝试过更改其他属性,但没有显示sql。我终于找到了原因。更新是个问题。谢谢你的帮助@GertArnold