首先尝试使用 EF 4.1 代码进行一些单元测试。我有我的实时数据库(SQL Server)和我的单元测试数据库(Sql CE)。在与 EF、Sql CE 4.0 和事务支持进行斗争(并失败)后,我决定运行测试的最简单方法是:
- 创建数据库
- 运行测试
- 删除数据库
- 冲洗并重复
我有我的 [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:
底层提供程序在打开时失败。
----> System.Data.SqlServerCe.SqlCeException
: 找不到数据库文件。
检查数据库路径
任何指针的 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 的一个错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)