나는 (엔티티 프레임 워크 4.2 사용) ASP.NET MVC 3 다음과 같이 트랜잭션을 사용하는 응용 프로그램이 있습니다nLog 및 TransactionScope에
using (var transaction = new TransactionScope())
{
// Database action 1
// Database action 2
context.SaveChanges();
Logger.Info("Record X updated");
transaction.Complete();
}
내가 오류를 얻을,하지만 데이터가 데이터베이스에 기록되지 않습니다. 그러나 로그 파일 대상 (테스트 목적으로 만 존재)은 정상적으로 작동합니다. 다음은 내 nLog (v2를 사용하고 있습니다) 설정입니다.
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
throwExceptions="true"
internalLogToConsole="true"
internalLogToConsoleError="true" >
<targets>
<target name="logfile" xsi:type="File" fileName="${basedir}app_data\file.txt" />
<target xsi:type="Database" name="database">
<commandText>INSERT INTO [LogEntries] (TimeStamp, Message, Level, Logger) VALUES(GETDATE(), @msg, @level, @logger)</commandText>
<parameter name="@msg" layout="${message}" />
<parameter name="@level" layout="${level}" />
<parameter name="@logger" layout="${logger}" />
<dbProvider>System.Data.SqlServerCe.4.0</dbProvider>
<connectionString>Data Source=${basedir}app_data\Logger.sdf</connectionString>
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile" />
<logger name="*" minlevel="Trace" writeTo="database" />
</rules>
</nlog>
Logger 선을 트랜잭션 스코프 외부로 이동하면 정상적으로 작동합니다. 그래서 나는 이것이 그 일과 관련이 있다고 생각합니다. 내 메인 데이터베이스에 SQL Server 2008 r2를 사용하고 로깅 데이터베이스에 SQL Compact 4를 사용하고 있습니다. 또한 useTranscations = "true"를 추가하려고했습니다.
내가 잘못하고있는 아이디어가 있습니까?
감사
앨런
트랜잭션 범위 외부에서 데이터베이스를 사용하는 경우 로거가 작동합니까? –
안녕하세요, 그렇습니다. logscope 외부로 이동하면 로거가 작동합니다. –