Проблема: (с 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(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);