2009-04-16 18 views
1

我是SubSonic(所有類型)的新手,但是我認爲我可能從3.0開始,因爲我想使用Linq,並且我得到的印象是3.0離發佈版本不遠。我應該如何創建亞音速3.0數據庫上下文類?

我嘗試了alpha下載.zip,但這看起來很老,並沒有單表格類名,所以我現在從最新的主幹SVN版本(rev62)運行。

我已經運行「簡單」的模板,從SubSonic.Templates \對我的數據庫簡單,一切似乎確定,但DB的上下文類模板創建開始是這樣的:

public partial class DB : IQuerySurface 
{ 
    static DB _db; 

    public DB() { 
     _db = new DB(); 
    } 

    public static DB CreateDB() 
    { 
     if (_db == null) 
     { 
      _db = new DB(); 
      _db.Init(); 
     } 
     return _db; 
    } 
    ... etc 

不出所料,當我調用DB.CreateDB時,ctor會無限遞歸併使堆棧溢出崩潰。

我根本不瞭解ctor--它看起來不像應該在那裏,但是「簡單」和「高級」模板都創造了類似的東西,還有一個非常大的測試套件,我想象是以某種方式驗證這一點。

很明顯,我在這裏有一個錯誤的結局 - 我錯過了什麼樣的盲點?

更新:簡單和高級模板不相似,高級模板沒有這個問題。謝謝您的幫助。

另一個更新:它看起來像這樣在SVN R66固定在簡單的模板

+0

它看起來像一個錯字。應該是 public DB(){} – 2009-04-16 22:37:50

+0

應該是「private DB(){}」。我只是改變模板,繼續前進。 – 2009-04-16 22:43:40

回答

2

不知道你從SVN最新位有錯誤,但我的版本從幾天前似乎工作正常。這裏是我的DB類開始了與:

public partial class DB : IQuerySurface 
{ 
    BatchQuery _batch = null; 

    public IDataProvider DataProvider; 
    public DbQueryProvider provider; 

    private IDatabaseSchema _schema; 
    public IDatabaseSchema Schema 
    { 
     get 
     { 
      return _schema; 
     } 
    } 

    public DB() 
    { 
     DataProvider = ProviderFactory.GetProvider("Northwind"); 
     Init(); 

    } 

    public DB(string instanceName, string connectStr) 
    { 
     SubSonic.DataProviders.ConnectionStringProvider.Instance.AddLocalConnectionString(
       instanceName, connectStr, "System.Data.SqlClient"); 

     DataProvider = ProviderFactory.GetProvider(instanceName); 

     Init(); 

    } 

...等...

我用的模板的高級版本。

+0

感謝你們 - 我認爲簡單的模板已經被破壞 - 雖然先進的模板看起來不錯。 – 2009-04-16 23:00:47

1

我更喜歡T4模板,這裏是只要在構造函數:

public DB() 
    { 
     DataProvider = ProviderFactory.GetProvider("Northwind"); 
     Init(); 

    } 

也有一個接受的連接字符串的重載。這對我來說工作得非常好,我使用linq支持,它充滿了真棒。