Subsonic 如何创建亚音速3.0 DB上下文类?
我不熟悉亚音速(各种口味),但我想我还是从3.0开始吧,因为我想使用Linq,我觉得3.0离发布不远了 我尝试了alpha download.zip,但是它看起来很旧,并且没有对表类名称进行奇点化,所以我现在使用最新的trunk SVN版本(rev62) 我已经对我的数据库运行了“simple”模板,从亚音速.templates\simple开始,一切似乎都正常,但模板创建的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
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模板,我认为我使用了错误的模板。谢谢-我认为简单的模板被破坏了-高级的模板看起来不错。