1

私は(すべてのフレーバーの)SubSonic を初めて使用しますが、Linq を使用したいので 3.0 から始めたほうがよいと考えました.3.0 はリリースからそれほど遠くないという印象を受けました.

アルファ ダウンロード .zip を試してみましたが、かなり古いようで、テーブル クラス名を単一化していないため、現在は最新のトランク 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 の単純なテンプレートで修正されているようです

4

2 に答える 2

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();

    }

...など...

テンプレートの高度なバージョンを使用しました。

于 2009-04-16T22:31:49.550 に答える
1

私は t4 テンプレートを好みます。そこに提供されている ctor は次のとおりです。

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

    }

接続文字列を受け入れるオーバーロードもあります。これは私にとっては非常にうまく機能しています.linqサポートを使用していますが、素晴らしいものでいっぱいです.

于 2009-04-16T22:38:21.467 に答える