【发布时间】:2014-07-02 03:47:40
【问题描述】:
我想为我的EF code first 项目编写我的第一个集成测试,使用VS2013 和SqlServer CE,在我的测试项目中按照TestInitialize 方法定义,删除旧的测试数据库并重新创建一个新的数据库每次测试运行:
[TestInitialize]
public void SetupTest()
{
// file path of the database to create
var filePath = @"C:\code\TestingEf\TestTemp\RealMyAppDb.sdf";
// delete it if it already exists
if (File.Exists(filePath))
File.Delete(filePath);
// create the SQL CE connection string - this just points to the file path
string connectionString = "Datasource = " + filePath;
// NEED TO SET THIS TO MAKE DATABASE CREATION WORK WITH SQL CE!!!
Database.DefaultConnectionFactory =
new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
using (var context = new IASCoDbContext(connectionString,new DropCreateDatabaseAlways<IASCoDbContext>()))
{
// this will create the database with the schema from the Entity Model
try
{
context.Database.Create();
}
catch
{
}
}
// initialise our DbContext class with the SQL CE connection string,
// ready for our tests to use it.
}
但是当代码到达context.Database.Create(); 行时,我得到以下错误:
{"指定的表不存在。[TableName]"} 我调试了一下测试,发现是因为程序要运行
MigrationsUP()方法。
[更新]
以下代码包含我的IADCoDbContext 的构造函数:
public class IASCoDbContext : BaseDbContext
{
static IASCoDbContext()
{
Database.SetInitializer<IASCoDbContext>(null);
}
public IASCoDbContext(string connectionString)
: base("name=ERPContext")
{
}
public IASCoDbContext(string connectionString, IDatabaseInitializer<IASCoDbContext> initializer)
:base(connectionString)
{
Database.SetInitializer(initializer);
}
...
}
这是我的BaseDbContext:
public class BaseDbContext : DbContext
{
public BaseDbContext()
: base()
{
}
public BaseDbContext(string context)
: base(context)
{
}
}
我是否可以为我的集成测试禁用 Code First Migration?
【问题讨论】:
标签: c# entity-framework ef-code-first migration integration-testing