Контексты данных в идеале должны быть единицей работы. Мне не на 100% ясно, где сломался ваш тест, но я не понимаю, почему вы не можете иметь несколько контекстов данных в одной транзакции.
Если вы используете транзакции на основе соединения, просто убедитесь, что вы указали SqlTransaction
для всех контекстов. Но еще проще просто использовать TransactionScope
; все контексты данных будут включены в окружающую транзакцию. Это позволяет легко выполнить интеграционный тестовый код в вашем DAL без изменения данных. Например:
using(var tran = new TransactionScope()) {
using(var ctx1 = new MyDataContext()) { ... }
SomeDal.SomeMethod(1,2,3);
using(var ctx2 = new MyDataContext()) { ... }
using(var ctx3 = new MyDataContext()) { ... }
}
Здесь все, что использует SqlConnection
, должно (если оно намеренно не использует нулевую транзакцию) в вашей транзакции, которая откатывается, поскольку мы не вызываем tran.Complete()
.