我是SubSonic(各种口味)的新手,但我认为不如从3.0开始,因为我想使用Linq,我得到的印象3.0离发布还不远。
我尝试了alpha下载.zip,但这看起来已经很老了,并没有单一化表类名,所以我现在运行的是最新的trunk SVN版本(rev62)。
我运行'简单'模板,从SubSonic.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的简单模板中看起来已修复此问题
答案 0 :(得分:2)
不知道你是否有来自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();
}
...等......
我使用了模板的高级版本。
答案 1 :(得分:1)
我更喜欢t4模板,这里提供的是ctor:
public DB()
{
DataProvider = ProviderFactory.GetProvider("Northwind");
Init();
}
还有一个接受连接字符串的重载。这对我很有效,我正在使用linq支持,它非常棒。