У меня есть следующий сценарий:Linq к SQL TransactionScope
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted },EnterpriseServicesInteropOption.Automatic))
{
using (DataContext db = new DataContext())
{
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();
try
{
bool outcome = InvokeInTransaction<string, object>(inputDict, out outputDict);
db.Transaction.Commit();
}
catch (Exception ex)
{
response.Outcome = BusinessEntityResponse.SystemError;
db.Transaction.Rollback();
}
}
}
Внутри вызова InvokeInTransaction ряд вызовов, сделанных в хранилище LTS для выполнения различных изменений данных. Проблема заключается в том, что внутри репозитория существует еще один
using (var db = new DataContext())
Внутри - код настойчивости. Проверка контекста в репозитории показывает Transaction = null, и я подозреваю, что «внутренний» контекст не знает о транзакции Ambient. Это можно сделать? Я понимаю, что EF управляет этим под обложками, а ограничение заключается в том, что код репозитория не может быть изменен. Любая помощь?
Спасибо Дэвид, эта модель, безусловно, выглядит хорошую реализацию, мне нравится WorkWith * отчеты как средство поддержания контекстных сфер, я просто не в состоянии получить вокруг моей коричневой области реализации классов репозитория (слишком много рефакторинга, чтобы делать на звонящих в эти классы). Отсюда исходный вопрос. Хороший узор, хотя .. – OldBoy