C# 使用EF对每个测试使用单独的数据库进行单元测试
当使用Fluent NHibernate进行单元测试时,我为每个测试创建一个新会话,该会话有自己的工厂,该工厂创建一个sqlite数据库,其中文件名等于完全限定的testname(来自TestContext)。这始终为我提供了一个干净的数据库,并且并行运行的unittests没有冲突。我将这些数据库存储在ramdrive上,因此我的速度与内存中的数据库相同,但之后也可以看到结果数据 是否可以先使用EF代码和SQLCE实现这一点?C# 使用EF对每个测试使用单独的数据库进行单元测试,c#,entity-framework,ef-code-first,sql-server-ce,multiple-databases,C#,Entity Framework,Ef Code First,Sql Server Ce,Multiple Databases,当使用Fluent NHibernate进行单元测试时,我为每个测试创建一个新会话,该会话有自己的工厂,该工厂创建一个sqlite数据库,其中文件名等于完全限定的testname(来自TestContext)。这始终为我提供了一个干净的数据库,并且并行运行的unittests没有冲突。我将这些数据库存储在ramdrive上,因此我的速度与内存中的数据库相同,但之后也可以看到结果数据 是否可以先使用EF代码和SQLCE实现这一点? 我希望这个问题的解决方案也能让我使用EF和两个数据库,一个用于离线
我希望这个问题的解决方案也能让我使用EF和两个数据库,一个用于离线访问的基于文件的本地数据库,与基于云的数据库同步。我想出了一个方法来实现这一点:
public class Db : DbContext {
private static SqlCeConnectionFactory factory =
new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
public static Db Create(string filename) {
return new Db(factory.CreateConnection(@"Data Source=" + filename));
}
public Db(DbConnection conn)
: base(conn, true) {
}
public DbSet<object> TableName {get; set;}
}
可能的重复不完全重复。我知道如何使用一个SQL Ce db,我需要为每个测试使用一个SQL Ce db,这通常等于运行unittests(1-4)的每个线程使用一个SQL Ce db。
private Db CreateDb() {
return Db.Create("R:\\"+TestContext.FullyQualifiedTestClassName +
TestContext.TestName + ".sdf");
}
[TestMethod]
public void StoreAndRetrieve() {
using (var db = CreateDb()) {
...
}
}