В некоторых бизнес-случаях у моего приложения есть причина ошибки внутри транзакции.Ситуация выглядит следующим образом:
static void MyFunc(DBContext context)
{
context.MyObjects.InsertOnSubmit(new MyObj{Id=1});
// Id - is a primary key
context.MyObjects.InsertOnSubmit(new MyObj{Id=1});
// here I force system to fail
// by trying to add record with
// duplicated primary key value
context.SubmitChanges(); // causes an error (as expected)
}
static void main()
{
using (DBContext context = new DBContext())
{
try
{
using (TransactionScope scope = CreateTransactionScope())
{
MyFunc(context);
scope.Complete();
}
}
catch(Exception exc)
{
MyLog log = new MyLog{...valid object data... want to log error ... };
context.MyLogs.InsertOnSubmit(log);
context.SubmitChanges();
}
}
}
проблема здесь в том, что попытка сохранить объект 'log' также вызывает попытку сохранить ранее добавленные объекты в таблицу 'MyObject'!И в результате я не могу сохранить запись в журнале ... и моя функция "main" выдает исключение ...
Как я могу решить эту проблему?Любые мысли приветствуются.
(я использую MS SQL 2005, Linq2Sql, .NET 3.5, идеи для .NET 4.0 также приветствуются!)
PS Я знаю, что это может быть хорошоИдея вызвать 'scope.Rollback', но если я оставлю 'using (TransactionScope scope ...)' без вызова 'Complete', тогда 'Откат должен быть применен автоматически ...
PPS Я мог бы создать новыйОбъект DBContext, но не думайте, что это разумно.