1

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

是否可以先使用 EF Code 和 SQL Ce 来实现这一点?我希望这个问题的解决方案也能让我将 EF 与两个数据库一起使用,一个基于文件的本地数据库用于离线访问,它同步到基于云的数据库。

4

1 回答 1

0

我想出了一种方法来实现这一点:

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;}
}

在 unittest 代码中,我可以使用:

private Db CreateDb() {
    return Db.Create("R:\\"+TestContext.FullyQualifiedTestClassName + 
                     TestContext.TestName + ".sdf");
}

[TestMethod]
public void StoreAndRetrieve() {
    using (var db = CreateDb()) {
        ...
    }
}
于 2013-01-27T18:12:29.340 回答