1

當使用Fluent NHibernate進行單元測試時,我爲每個測試創建一個新的會話,並且該會話有自己的工廠創建一個sqlite數據庫,其中文件名等於完全限定的測試名TestContext)。這總是給我一個乾淨的數據庫,並沒有與單位測試並行衝突。我將這些數據庫存儲在ramdrive上,因此我具有與內存數據庫相同的速度,但也能夠在之後查看結果數據。單元測試與EF使用單獨的數據庫爲每個測試

使用EF Code和SQL Ce可以實現這一點嗎? 我希望這個問題的解決方案也可以讓我使用EF與兩個數據庫,一個基於文件的本地數據庫用於脫機訪問,同步到基於雲的數據庫。

+0

的[綜合測試實體框架代碼首先可能的複製在內存數據庫](http://stackoverflow.com/questions/5912128/integration-testing-entity-framework-code-first-with-in-memory-database) – khellang

+0

不完全重複。我知道如何使用單個SQL Ce數據庫,我需要爲每個測試使用一個,這通常等於每個運行unittests(1-4)的線程一個。 –

回答

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()) { 
     ... 
    } 
}