Выпуск: (с Sql 2005)
- Как запросить базу данных, когда транзакция завершена? (Так как он блокирует стол)
- Как вызвать откат транзакции, а затем закрыть себя, чтобы можно было запросить таблицу?
Итак, я нашел это очень много:
[TestMethod]
public void CreateUser()
{
TransactionScope transactionScope = new TransactionScope();
DataContextHandler.Context.AddToForumUser(userToTest);
DataContextHandler.Context.SaveChanges();
DataContextHandler.Context.Dispose();
}
Где DataContextHandler - это простой синглтон, который предоставляет объект контекста для моих объектов. Кажется, это работает так, как вы думаете. Он создает пользователя, сохраняет, а затем откатывается, когда программа заканчивается. (IE тест завершен)
Проблема: как заставить транзакцию откатиться и уничтожить себя, чтобы я мог запросить таблицу?
Причина: в целях тестирования я хочу убедиться, что пользователь:
- Сохранено
- Может быть запрошен правильно, чтобы доказать его существование
- Удалено (Нежелательные данные)
- Можно запросить, чтобы убедиться, что оно было удалено.
На данный момент я могу получить откат транзакции только после завершения теста И не могу понять, как выполнить запрос с транзакцией вверх:
[TestMethod]
public void CreateUser()
{
ForumUser userToTest = new ForumUser();
TransactionScope transactionScope = new TransactionScope();
DataContextHandler.Context.AddToForumUser(userToTest);
DataContextHandler.Context.SaveChanges();
Assert.IsTrue(userToTest.UserID > 0);
var foundUser = (from user in DataContextHandler.Context.ForumUser
where user.UserID == userToTest.UserID
select user).Count(); //KABOOM Can't query since the
//transaction has the table locked.
Assert.IsTrue(foundUser == 1);
DataContextHandler.Context.Dispose();
var after = (from user in DataContextHandler.Context.ForumUser
where user.UserID == userToTest.UserID
select user).Count(); //KABOOM Can't query since the
//transaction has the table locked.
Assert.IsTrue(after == 0);
}
ОБНОВЛЕНИЕ Это работало для отката и проверки, но все еще не может выполнить запрос в секции using:
using(TransactionScope transactionScope = new TransactionScope())
{
DataContextHandler.Context.AddToForumUser(userToTest);
DataContextHandler.Context.SaveChanges();
Assert.IsTrue(userToTest.UserID > 0);
//Still can't query here.
}
var after = (from user in DataContextHandler.Context.ForumUser
where user.UserID == userToTest.UserID
select user).Count();
Assert.IsTrue(after == 0);