当用作实体框架的提供者时,调试/显示SQLite(System.Data.SQLite)的查询?

时间:2013-01-17 16:10:02

标签: entity-framework sqlite debugging ado.net system.data.sqlite

我将Microsoft Entity Framework与SQLite数据库一起使用。我在调试方面遇到了很多困难。

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

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

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

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

  • 在堆栈跟踪窗口中,它只显示[外部代码]
  • 我从Microsoft Symbol Server下载了所有符号,但没有更多信息
  • 我在“SaveChanges()”之前放置了一个BreakPoint,并使用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   行为)          bei System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)          bei System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator)   翻译器,EntityConnection连接,字典2 identifierValues, List 1 generatedValues)          bei System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager)   stateManager,IEntityAdapter适配器)

  • 在一个相关的SO-Question中,答案是查看StateEntries,但正如您在此处所见。他们也没有帮助我。

enter image description here

1 个答案:

答案 0 :(得分:0)

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

var sql = db.Entities.ToString()

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

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