Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EF对每个测试使用单独的数据库进行单元测试_C#_Entity Framework_Ef Code First_Sql Server Ce_Multiple Databases - Fatal编程技术网

C# 使用EF对每个测试使用单独的数据库进行单元测试

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和两个数据库,一个用于离线

当使用Fluent NHibernate进行单元测试时,我为每个测试创建一个新会话,该会话有自己的工厂,该工厂创建一个sqlite数据库,其中文件名等于完全限定的testname(来自TestContext)。这始终为我提供了一个干净的数据库,并且并行运行的unittests没有冲突。我将这些数据库存储在ramdrive上,因此我的速度与内存中的数据库相同,但之后也可以看到结果数据

是否可以先使用EF代码和SQLCE实现这一点?
我希望这个问题的解决方案也能让我使用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()) {
        ...
    }
}