使用Fluent NHibernate进行单元测试时,我为每个测试创建一个新会话,该会话有自己的工厂,创建一个sqlite数据库,其中文件名等于完全限定的testname(来自TestContext)。这总是给我一个干净的数据库,并没有与并行运行的单元测试冲突。我将这些数据库存储在ramdrive上,因此我具有与内存数据库相同的速度,但之后也可以看到结果数据。
首先使用EF Code和SQL Ce可以实现这一点吗? 我希望这个问题的解决方案也可以让我使用EF和两个数据库,一个基于文件的本地数据库用于离线访问,同步到基于云的数据库。
答案 0 :(得分: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;}
}
在单元测试代码中,我可以使用:
private Db CreateDb() {
return Db.Create("R:\\"+TestContext.FullyQualifiedTestClassName +
TestContext.TestName + ".sdf");
}
[TestMethod]
public void StoreAndRetrieve() {
using (var db = CreateDb()) {
...
}
}