Subsonic 如何创建亚音速3.0 DB上下文类?

Subsonic 如何创建亚音速3.0 DB上下文类?,subsonic,recursion,Subsonic,Recursion,我不熟悉亚音速(各种口味),但我想我还是从3.0开始吧,因为我想使用Linq,我觉得3.0离发布不远了 我尝试了alpha download.zip,但是它看起来很旧,并且没有对表类名称进行奇点化,所以我现在使用最新的trunk SVN版本(rev62) 我已经对我的数据库运行了“simple”模板,从亚音速.templates\simple开始,一切似乎都正常,但模板创建的DB上下文类开始如下: public partial class DB : IQuerySurface { sta

我不熟悉亚音速(各种口味),但我想我还是从3.0开始吧,因为我想使用Linq,我觉得3.0离发布不远了

我尝试了alpha download.zip,但是它看起来很旧,并且没有对表类名称进行奇点化,所以我现在使用最新的trunk SVN版本(rev62)

我已经对我的数据库运行了“simple”模板,从亚音速.templates\simple开始,一切似乎都正常,但模板创建的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中的简单模板中得到了修复

不知道您是否从SVN获得了带有bug的最新信息,但我几天前的版本似乎工作正常。下面是我的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();

    }
。。。等等


我使用了模板的高级版本。

我更喜欢t4模板,这里是提供的CTR:

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

    }

还有一个重载接受连接字符串。这对我来说效果很好,我正在使用linq支持,它非常棒。

它看起来像一个打字错误。应该是public DB(){}应该是“private DB(){}”。我只想更改模板并继续。谢谢-有两套t4模板,我认为我使用了错误的模板。谢谢-我认为简单的模板被破坏了-高级的模板看起来不错。