2009-12-01 33 views
0

在我投入時間修改SubSonic 3源代碼之前,我想我會問我是否缺少一些簡單的東西。SubSonic 3 Repository - SQLite In-Memory

是否可以使用SubSonic 3存儲庫進行SQLite In-Memory數據庫遷移?我無法找到強制DbDataProvider保持連接打開的方式,因此在連接關閉時內存SQLite數據庫不會消失。

與連接字符串我試圖爲單元測試...

public class SQLite_InMemory_SimpleRepositoryTests 
{ 
    public class Job 
    { 
     public Guid JobId { get; set; } 
     public string JobName { get; set; } 
    } 

    [Fact] 
    public void SQLite_InMemory_SimpleRepo_CanStayOpen() 
    { 
     IDataProvider provider = ProviderFactory.GetProvider("Data Source=:memory:;Version=3;New=True;Pooling=True;Max Pool Size=1;", "System.Data.SQLite"); 
     IRepository repository = new SimpleRepository(provider, SimpleRepositoryOptions.RunMigrations); 

     for (int i = 0; i < 10000; i++) 
     { 
      var job = new Job {JobId = Guid.NewGuid(), JobName = "Job_"+i}; 
      repository.Add(job); 
     } 
    } 
} 

我嘗試設置在IDataProvider「共享連接」,但連接似乎仍然關閉。

如果不是,我將更新SubSonic源代碼並提交更改。

謝謝!

回答

2

有趣的 - 沒有沒有辦法,我能想到的要做到這一點以外,也許創建靜態IDataProvider但即使如此,我們關閉掉我斯波西你可以創建這樣搞執行標量的等

連接通過實現IDataProvider然後根據需要設置事件 - 所有執行都會經過它。但是,這是使我懷疑,如果我們明確地關閉下來調用代碼 - 這將是對我來說不好的設計...嗯\

很想有這個功能...

+0

嗨,羅布。謝謝(你的)信息。我在執行過程中做了一些跟蹤,並在幾個地方調用了Close和Dispose。我將在IDataProvider上實現一個名爲bool IsSqlLiteMemoryDb()的擴展方法,該方法將檢查連接類型和:memory:在連接字符串中並覆蓋disposes/closes。代碼應該在哪裏發佈? – 2009-12-01 18:40:38

+0

另外,只需注意,我能夠通過測試,但'hackishly'。我將重構代碼併發布。讓我知道在哪裏。謝謝。 – 2009-12-01 18:44:07

+0

我會在這裏假設?:http://github.com/subsonic/SubSonic-3.0 – Mike 2009-12-02 15:34:00