2009-04-16 4 views
1

Ich bin neu bei SubSonic (von allen Geschmacksrichtungen), dachte aber, ich könnte genauso gut mit 3.0 beginnen, weil ich gerne Linq verwenden würde, und ich habe den Eindruck, dass 3.0 nicht weit von der Veröffentlichung entfernt ist.Wie sollte ich die Subsonic 3.0 DB Kontextklasse erstellen?

Ich habe versucht, den Alpha-Download. Zip, aber das scheint ziemlich alt und nicht Tabellenklassennamen zu vereinzeln, so dass ich jetzt von der neuesten Stamm SVN-Version (rev62) läuft.

ich die ‚einfachen‘ Vorlagen ausgeführt haben, von SubSonic.Templates \ Einfach gegen meine Datenbank und alles scheint in Ordnung, aber die DB Kontextklasse der die Vorlagen zu erstellen beginnt wie folgt aus:

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 

Wenig überraschend, Wenn ich DB.CreateDB aufruft, rekuriert der ctor endlos und stürzt alles mit einem Stapelüberlauf ab.

Ich verstehe den Ctor überhaupt nicht - es sieht nicht so aus, als müsste es da sein, aber sowohl die "einfachen" als auch die "fortgeschrittenen" Vorlagen erzeugen etwas Ähnliches, und es gibt eine riesige Testsuite, die ich Stellen Sie sich vor, dies zu überprüfen.

Klar habe ich hier das falsche Ende des Sticks - was für einen blendend offensichtlichen Punkt habe ich verpasst?

Aktualisierung: Die einfachen und erweiterten Vorlagen sind nicht ähnlich, und die fortgeschrittenen haben dieses Problem nicht. Danke für die Hilfe.

Ein weiteres Update: Es sieht wie folgt aus wird in den einfachen Vorlagen in SVN r66

+0

Es sieht aus wie ein Tippfehler. Sollte sein public DB() {} –

+0

Sollte "private DB() {}" sein. Ich würde nur die Vorlage ändern und weitermachen. –

Antwort

2

Sie wissen nicht, ob Sie die neuesten Bits von SVN mit einem Fehler haben festgelegt, aber meine Version von ein paar Tagen scheint gut zu funktionieren. Hier ist, was meine DB-Klasse beginnt mit:

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

    } 

... etc ...

ich verwendet, um die erweiterte Version der Vorlagen.

+0

Danke dafür - ich denke, die einfachen Vorlagen sind kaputt - die fortgeschrittenen scheinen aber gut. –

1

ich die T4-Vorlagen bevorzugen, hier ist der Ctor bereitgestellt:

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

    } 

gibt es auch eine Überlastung, die eine Verbindungszeichenfolge akzeptiert. Das funktioniert ganz gut für mich, ich benutze die linq-Unterstützung und es ist voller toller.

+0

Danke - es gibt zwei Sätze von T4-Vorlagen, und ich glaube, ich habe die falschen verwendet. –