实体框架4.1“代码优先";“代码优先".在Database.Delete之后不会再次调用SetInitializer [英] Entity Framework 4.1 "Code First" SetInitializer not being called again after Database.Delete
问题描述
首先尝试使用EF 4.1代码进行一些单元测试.我有实时数据库(SQL Server)和单元测试数据库(Sql CE).在与EF,Sql CE 4.0和事务支持战斗(失败)之后,我决定运行测试的最简单方法是:
Trying to do some unit testing with EF 4.1 code first. I have my live db (SQL Server) and my unit test DB( Sql CE). After fighting (and losing) with EF, Sql CE 4.0 and Transaction support I decided the simplest way to run my test was to:
- 创建Db
- 运行测试
- 删除Db
- 冲洗并重复
我有[设置]和[TearDown]函数:
I have my [Setup] and [TearDown] functions:
[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.
Issue is that System.Data.Entity.Database.SetInitializer does not call MyTestContextInitializer after the first test.
因此第二次测试失败并显示:
Hence the 2nd test then fails with:
System.Data.EntityException: 基础提供程序在Open上失败.
----> System.Data.SqlServerCe.SqlCeException :找不到数据库文件. 检查数据库路径
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'解决了这个问题.像这样:
I got around this by calling 'InitializeDatabase' manually. Like so:
[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的错误.
I think it may be a bug with EF 4.1 RC.
这篇关于实体框架4.1“代码优先";“代码优先".在Database.Delete之后不会再次调用SetInitializer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!