Я понимаю, что этот вопрос задавался ранее, но мне еще не удалось найти ответ, который действительно работает.
Моя проблема возникает, когда мои модульные тесты пытаются вызвать веб-сервис, который использует Linq длязапрос к базе данных.
Модульный тест настроен так:
[TestInitialize]
public void SetUp()
{
var scope = new TransactionScope(TransactionScopeOption.Required,TimeSpan.MaxValue);
var database = new DatabaseDataContext();
}
[TestCleanup]
public void TearDown()
{
scope.Dispose();
database.Dispose();
}
[TestMethod]
public void GetCategoryList_Success()
{
// create test data
var result = service.GetItems();
}
Метод service.GetItems выглядит так:
try
{
using (DatabaseDataContext database = new DatabaseDataContext())
{
var items = (from i in database.Items
select i).ToList<Items>();
return items;
}
}
catch (Exception ex)
{
// log error
return null;
}
Когда запрос Linqпытается выполнить, выдается следующее исключение:
Операция недопустима для состояния транзакции.
Я считаю, что это связано с вложенными транзакциями,но мне нужно держать транзакцию в тестовом классе открытой, чтобы тестовые данные фактически не сохранялись в базе данных, и я могу распоряжаться ими после запуска теста.
Кроме того, мой хостинг находится на общем ресурсеНапример, я не могу внести какие-либо изменения непосредственно на сервер.
Есть ли способ заставить это работать как есть, или, альтернативно, есть ли альтернатива использованию TransactionScope в этом контексте?