1

Fluent NHibernate で単体テストを行う場合、テストごとに新しいセッションを作成します。そのセッションには、ファイル名が (TestContext からの) 完全修飾テスト名と等しい sqlite-database を作成する独自のファクトリがあります。これにより、常にクリーンなデータベースが得られ、並行して実行されている単体テストからの競合はありません。私はこれらのデータベースを RAM ドライブに保存しているので、メモリ内データベースと同じ速度ですが、結果のデータを後で見ることもできます。

最初にEFコードとSQ​​L Ceを使用してこれを達成することは可能ですか? この問題の解決策により、EF を 2 つのデータベースで使用できるようになることを願っています。1 つはオフライン アクセス用のファイル ベースのローカル データベースで、クラウド ベースのデータベースと同期します。

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 に答える