1

我将 Microsoft Entity Framework 与 SQLite 数据库一起使用。在调试方面,我真的很难。

现在我只在我调用“saveChanges()”-方法后在我的输出窗口中得到这个

SQLite error (1): near "SELECT": syntax error

显然 EF 在更新我的数据时搞砸了一些查询。我正在寻找一种获取查询的方法,这似乎是错误的。我不能听听对数据库发起了哪些查询吗?

我尝试了其他的东西,也没有提供更多有用的信息:

  • 在堆栈跟踪窗口中,它只显示 [外部代码]
  • 我从 Microsoft 符号服务器下载了所有符号,但那里没有更多信息
  • 我在“SaveChanges()”之前放置了一个断点,并使用 F11 逐步完成所有操作,但没有显示内部代码(如符号文件中的代码)
  • 我下载了 SQLite 的源文件,并将这些项目包含在我的项目中并编译了源文件。但它仍然没有通过 SQLite 源。我可以在 ObjectExplorer 中看到它们,但是当我在那里设置 BreakPoint 时,它们不是完全红色的(没有达到断点。没有加载此文档的符号)
  • 在检查 System.Data.UpdateException 时,我发现堆栈跟踪引用了 SQLite 包的一个类,但由于我无法在那里设置断点,因此我无法读取那里的参数值。这是堆栈:

bei System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String& strRemain) bei System.Data.SQLite.SQLiteCommand.BuildNextCommand() bei System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index) bei System.Data.SQLite.SQLiteDataReader.NextResult() bei System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior 行为) bei System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior 行为) bei System.Data .SQLite.SQLiteCommand.ExecuteDbDataReader(CommandBehavior 行为) 北 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为) 北 System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator 翻译器,EntityConnection 连接,字典2 identifierValues, List1 generateValues) bei System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter 适配器)

  • 在一个相关的 SO-Question 中,答案是查看 StateEntries,但正如您在此处看到的那样。他们也不帮我。

在此处输入图像描述

4

1 回答 1

0

对于查询,您可以尝试使用 .ToString() 或 .ToSqlString() (取决于您使用的是 ObjectQuery 还是 DbQuery),例如:

var sql = db.Entities.ToString()

其中 db 是一个 DbContext 实例。如果 db 是一个 ObjectContext 实例,您将使用.ToTraceString().

对于更新,无法访问此信息。调试时,您可以使用 IntelliTrace 查看发送到数据库的命令。如果您需要跟踪/记录,您可以使用EF Tracing provider。需要一些技巧才能使其与 CodeFirst 一起使用。前段时间我在博客上写过这个。

于 2013-01-18T20:44:41.137 回答