Entityフレームワークによってデータベースに送信されているSQLをログに記録しようとしていますが、膨大な運がありません。私はコードを最初に新しいデータベースワークフローに取り組んでいますが、DbContextにプロパティを追加すると、データベースからOracleエラーが返ってきます。識別子が長すぎます。私はどのように私のテーブルを作成しようとしている識別子の名前が長すぎるかを識別するためにデータベースに送信されているSQLを見てみたいと思います。C#Entity Framework Logging(DbContext)が機能しない
現在、私は次のような場所にありますが、コードの実行中に呼び出されることはありません。私は例外が発生したのでデータがデータベースに送られていることを知っていますが、ロガーは決して実行されません。本当に変わったことがここにあります。時間の99%と同じように、インターセプタは動作しません。
public class DBLog
{
private string path = @"C:\users\myuser\desktop\oracleloggingtest1.txt";
public void Log(string message)
{
File.AppendAllText(path, message);
}
}
...
...
DBLog lggr = new DBLog();
Database.SetInitializer(new DropCreateDatabaseAlways<TestDbContext>());
using (var context = new TestClearPersonModel())
{
context.Database.Log = s => lggr.Log(s);
context.WorkAffiliations.Add(personReportResult.WorkAffiliations);
...
context.SaveChanges();
}
識別子の1が長すぎるため、entityframeworkからの例外は、Oracleからcontext.workaffiliations.addラインにスローされますが、この情報のどれもが記録されません。
先日、私はこれを使いこなしていましたが、2,3日前にデスクトップにログファイルがあり、そこに古いデータが含まれているため、ログが機能しました。なぜ私は現在働いていないのか分かりません。私はこのデータを得るためにいくつかの異なる方法を試しました。
ご協力いただきましてありがとうございます。
EDIT: Tipxの提案を試してみると面白い開発...私は、異なる方法を使ってデータベースに行くsqlコマンドを記録できるように徹夜しています。私は、DB操作を開始する前に、私は関数呼び出しによって、プログラム登録IDbCommandInterceptorのセットアップを持っていた、そして私はentityframeworkセクションで私のアプリの設定でこれを持って、上記の方法を持っていた:このコードの
<interceptors>
<interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework">
<parameters>
<parameter value="C:\users\myuser\desktop\orclogtst.txt" />
</parameters>
</interceptor>
</interceptors>
いずれも行われていませんランニング。私は試みたすべての異なるロギングメカニズムにブレークポイントを持っていて、決して呼び出されませんでした。私は数回、数十回試してみました。 Tipxが推奨する小さな変更を加えた後(ちょうどコンソールにログオンしようとしたところ)、突然両方の他のログ機能が働いた。 IDbCommandInterceptorのブレークポイントにデータを記録し、web.configファイルのインターセプタがそこに指定されたファイルにデータを記録していることがわかりました....
しかし、これはその実行時にのみ機能します。私は直ちに(何も変更せずに)自分のコードを再実行しようとしましたが、もう機能しませんでした。コードに変更を加えてコンパイルした後、Tipxで推奨された変更を追加しましたが、それでも機能しませんでした。これらのメソッドが何らかのコード変更なしで突然呼び出され、以来再び呼び出されることはありませんか?
これは、SQLプロバイダではなくOracleプロバイダを使用して行う必要がありますか? – ImNotADrugDealer