尝试首先使用EF 4.1代码进行一些单元测试.我有我的实时数据库(sql Server)和我的单元测试数据库(sql CE).在使用EF,sql CE 4.0和事务支持进行战斗(并且失败)后,我决定运行我的测试的最简单方法是:
>创建Db
>运行测试
>删除Db
>冲洗并重复
我有[Setup]和[TearDown]功能:
[SetUp] public void Init() { System.Data.Entity.Database.SetInitializer(new MyTestContextInitializer()); _dbContext = ContainerFactory.Container.GetInstance<IContext>(); _testConnection = _dbContext.ConnectionString; } [TearDown] public void Cleanup() { _dbContext.Dispose(); System.Data.Entity.Database.Delete(_testConnection); }
问题是System.Data.Entity.Database.SetInitializer在第一次测试后没有调用MyTestContextInitializer.
因此第二次测试失败了:
System.Data.EntityException : The
underlying provider Failed on Open.
—-> System.Data.sqlServerCe.sqlCeException
: The database file cannot be found.
Check the path to the database
TIA任何指针
解决方法
我通过手动调用’InitializeDatabase’解决了这个问题.像这样:
[SetUp] public void Init() { var initializer = new MyTestContextInitializer(); System.Data.Entity.Database.SetInitializer(initializer); _dbContext = ContainerFactory.Container.GetInstance<IContext>(); initializer.InitializeDatabase((MyTestContext)_dbContext); _testConnection = _dbContext.ConnectionString; } [TearDown] public void Cleanup() { System.Data.Entity.Database.Delete(_testConnection); _dbContext.Dispose(); }
我认为这可能是EF 4.1 RC的一个错误.