2009-04-16 7 views
1

Je suis nouveau à SubSonic (de toutes les saveurs), mais je pensais que je pourrais aussi bien commencer par 3.0, parce que j'aimerais utiliser Linq, et j'ai l'impression que la version 3.0 n'est pas si loin de la version.Comment créer la classe de contexte DB subsonique 3.0?

J'ai essayé le .zip de téléchargement alpha, mais cela semble assez vieux et n'a pas singularisé les noms de classe de table, donc je cours maintenant à partir de la dernière version de SVN de tronc (rev62).

J'ai couru les modèles « simples », à partir SubSonic.Templates \ simple contre ma base de données et tout semble ok, mais la classe de contexte DB que les modèles créent commence comme ceci:

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 

Sans surprise, quand j'appelle DB.CreateDB, le ctor récursive indéfiniment et plante tout avec un débordement de pile.

Je ne comprends pas vraiment le ctor du tout - il ne semble pas qu'il devrait être là, mais les modèles 'simple' et 'avancé' créent quelque chose de similaire, et il y a une suite de tests énorme que je Imaginez est en train de vérifier cela en quelque sorte.

De toute évidence, j'ai la mauvaise extrémité du bâton ici - quel point aveuglément évident ai-je manqué?

Mise à jour: Les modèles simples et avancés ne sont pas similaires, et les modèles avancés n'ont pas ce problème. Merci pour l'aide.

Une autre mise à jour: Il ressemble à ceci est fixé dans les modèles simples dans SVN R66

+0

Cela ressemble à une faute de frappe. Doit être public DB() {} –

+0

Devrait être "DB privé() {}". Je voudrais juste changer le modèle et passer à autre chose. –

Répondre

2

Je ne sais pas si vous avez les derniers morceaux de SVN avec un bug, mais ma version d'il y a quelques jours semble fonctionner correctement. Voici ce que ma classe DB commence avec:

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 ...

J'ai utilisé la version avancée des modèles.

+0

Merci pour cela - je pense que les modèles simples sont brisés - les avancés semblent bien cependant. –

1

Je préfère les modèles de t4, voici le cteur fourni là:

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

    } 

il y a aussi une surcharge qui accepte une chaîne de connexion. Cela fonctionne très bien pour moi, j'utilise le support linq et c'est génial.

+0

Merci - il y a deux ensembles de modèles t4, et je pense que j'utilisais les mauvais. –