Trong nghiên cứu của tôi về việc quay lại các giao dịch trong EF4, có vẻ như mọi người đều đề cập đến this blog post hoặc đưa ra một lời giải thích tương tự. Trong kịch bản của tôi, tôi muốn làm điều này trong một kịch bản thử nghiệm đơn vị nơi tôi muốn khôi phục thực tế mọi thứ tôi làm trong ngữ cảnh thử nghiệm đơn vị của mình để giữ cập nhật dữ liệu trong cơ sở dữ liệu.). Để làm được điều này, tốt nhất là nên làm theo kế hoạch sau đây? Tôi có thiếu một số khái niệm hoặc bất cứ điều gì khác lớn với điều này (ngoài các chức năng SetupMyTest
và PerformMyTest
của chúng tôi sẽ không thực sự tồn tại theo cách đó)?Làm thế nào để rollback trong EF4 cho Unit Test TearDown?
[TestMethod]
public void Foo
{
using (var ts = new TransactionScope())
{
// Arrange
SetupMyTest(context);
// Act
PerformMyTest(context);
var numberOfChanges = context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
// if there's an issue, chances are that an exception has been thrown by now.
// Assert
Assert.IsTrue(numberOfChanges > 0, "Failed to _____");
// transaction will rollback because we do not ever call Complete on it
}
}
Hmm, trong EF4, dường như quá tải SaveChanges (sai) đã không được chấp nhận. Có vẻ như SaveChanges (SaveOptions.AcceptAllChangesAfterSave) là sự thay thế cho nó vì vậy tôi đang thực hiện cập nhật đó trong câu hỏi ban đầu của mình. – Jaxidian