У меня есть приложение ASP.NET MVC 3 (с использованием Entity Framework 4.2), которое использует транзакции следующим образом:
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".
Есть идеи, что я делаю не так?
Спасибо
Alan