1

SQLite データベースで Microsoft Entity Framework を使用しています。デバッグに関しては、本当に苦労しています。

現在、「saveChanges()」メソッドを呼び出した後、出力ウィンドウでのみこれを取得します

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

データの更新中に EF が一部のクエリを台無しにしたようです。クエリを取得する方法を探していますが、それは間違っているようです。DB に対して実行されるクエリを聞くことはできませんか?

私は他のことを試しましたが、これもより有用な情報を提供しませんでした:

  • スタック トレース ウィンドウでは、[外部コード] とだけ表示されます。
  • Microsoft Symbol Server からすべてのシンボルをダウンロードしましたが、それ以上の情報はありません
  • "SaveChanges()" の直前に BreakPoint を配置し、F11 を使用してすべてを実行しましたが、内部コード (シンボル ファイルなど) は表示されません。
  • SQLite のソース ファイルをダウンロードし、それらのプロジェクトを自分のプロジェクトに含めて、ソース ファイルをコンパイルしました。しかし、それでも SQLite ソースをステップスルーしません。ObjectExplorer で見ることができますが、BreakPoint を設定すると完全に赤くなりません (Breakpoint に到達しません。このドキュメントへのシンボルは読み込まれません)。
  • System.Data.UpdateException を調べると、SQLite Package のクラスを参照するスタック トレースが見つかりますが、そこにブレーク ポイントを設定できないため、そこのパラメーター値を読み取ることができません。これはスタックトレースです:

System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String& strRemain) System.Data.SQLite.SQLiteCommand.BuildNextCommand() System.Data.SQLite.SQLiteCommand.GetStatement(Int32) index) System.Data.SQLite.SQLiteDataReader.NextResult() System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behavior) System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior) System.Data .SQLite.SQLiteCommand.ExecuteDbDataReader(CommandBehavior 動作) System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 動作) System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator トランスレーター、EntityConnection 接続、Dictionary2 identifierValues, List1 generatedValues) bei System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)

  • 関連する SO-Question の 1 つでは、答えは 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 に答える