私のasp.netmvc3アプリでは、LinqToSqlによって生成されたSQLコードを追跡したいと思います。ファイルに書きたいです。これが私がすることです:
web.configの変更:
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="myListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="LogLinqToSql.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
ファイルへの書き込みに役立つクラスを作成しました(1つのチュートリアルで見つけました)。
public class LogLinqToSql : TextWriter
{
public override void Write(string value)
{
Debug.Write(value);
}
public override void Write(char[] buffer, int index, int count)
{
Debug.Write(new String(buffer, index, count));
}
public override System.Text.Encoding Encoding
{
get { return System.Text.Encoding.UTF8; }
}
}
そして、リポジトリからアイテムを取得するために使用され、ビューモデルを使用するStoreControllerアクションメソッドContentの変更(コードが機能しないため、マビー):
#define TRACE
public ViewResult Content(string category, int page = 1)
{
var context = new WebStoreDataContext();
Trace.WriteLine("StoreController.Content BEGINS");
context.Log = Console.Out;
var model = new StoreContentViewModel
{
Items = _itemsRepository.GetItems()
.Where(i => category == null || (i.Product != null && i.Product.Category == category))
.OrderBy(i => i.ItemId)
.Skip((page - 1) * PageSize)
.Take(PageSize),
// initializing other properties
};
context.Log = new LogLinqToSql();
context.SubmitChanges();
Trace.WriteLine("StoreController.Content ENDS");
Trace.WriteLine("");
return View(model);
}
.logファイルには「BEGIN」行と「END」行のみが表示されます。
だから、私は完全に間違ったことをしていて、ログ情報をファイルに書き込む別のアプローチがありますか、それとも一部を修正する必要がありますか?
よろしくお願いします!
編集:
また、アクションメソッドでこれを試しました:
context.Log = new StreamWriter(@"C:\Users\Aleksey\repos\2\WebStore\WebStore\LogLinqToSql.log");
しかし、IOExceptionが発生します。このファイルはすでに他のプロセスによって使用されているため、プロセスはこのファイルにアクセスできません。
これが同じ質問です