2009-04-16 5 views
1

Я новичок в SubSonic (из всех вкусов), но думал, что могу начать с версии 3.0, потому что я бы хотел использовать Linq, и я получаю впечатление, что это не так далеко от выпуска.Как создать дозвуковой класс контекста 3.0 DB?

Я пробовал альфа-загрузку .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 

Unsurprisingly, когда я вызываю DB.CreateDB, ctor бесконечно рекурсивно и сбрасывает все с переполнением стека.

Я вообще не понимаю, что такое ctor - он не выглядит так, как будто он должен быть там, но как «простые», так и «продвинутые» шаблоны создают нечто похожее, и есть обширный набор тестов, который я Представьте, это как-то это проверяет.

Очевидно, что у меня есть неправильный конец палки - какой ослепительно очевидный момент я пропустил?

Обновление: Простые и расширенные шаблоны не похожи, а расширенные не имеют этой проблемы. Спасибо за помощь.

Другой Update: Похоже, это фиксируется в простых шаблонов в SVN R66

+0

Это похоже на опечатку. Должно быть public DB() {} –

+0

Должно быть "private DB() {}". Я бы просто изменил шаблон и продолжил. –

ответ

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

Спасибо за это - я думаю, что простые шаблоны сломаны - продвинутые кажутся хорошими, хотя. –

1

Я предпочитаю шаблоны t4, здесь т е р при условии:

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

    } 

есть также перегрузка, которая принимает строку подключения. Это работает хорошо для меня, я использую поддержку linq, и она полна удивительной.

+0

Спасибо - есть два набора шаблонов t4, и я думаю, что использовал неправильные. –

 Смежные вопросы

  • Нет связанных вопросов^_^