简体   繁体   中英

How can I roll back changes with Entity Framework 5 within a Unit Test project

I'm playing with Entity Framework, and I have a Unit Test project that I want to exercise what I've done so far. I'd like to have it not actually update my test database when it's done. If I was working in SQL I would create a transaction and then roll it back at the end.

How can I do the same thing here?

As I understand it, context.SaveChanges(); is effectively doing the write to the database. And if I don't have that, then allCartTypes is empty after I assign it context.CarTypes.ToList()

Here's an example of one of my Test classes.

using System;
using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Trains;
using System.Linq;

namespace TrainsTest
{
    [TestClass]
    public class TestCarType : TestBase
    {
        [TestMethod]
        public void TestCarTypeCreate_Success()
        {
            var tankerCarType = new CarType {Name = "Tanker"};
            var boxCarType = new CarType { Name = "Box" };
            using (var context = new TrainEntities())
            {
                context.CarTypes.Add(tankerCarType);
                context.CarTypes.Add(boxCarType);

                context.SaveChanges();

                var allCartTypes = context.CarTypes.ToList();
                foreach (var cartType in allCartTypes)
                {
                    Debug.WriteLine(cartType.CarTypeId + " - " + cartType.Name);
                }
            }
        }
    }
}

I know I'm missing something fundamental, but I don't know what it is. and my googling has been fruitless.

There's a MSDN article about ef transactions.

http://msdn.microsoft.com/en-gb/library/vstudio/bb738523(v=vs.100).aspx

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM