2009-11-19 3 views
0

je rencontrais bug dans mon programm à cause de SubSonic3 retourne des enregistrements avec chaîne de connexion par défaut danssubsonique et non par défaut problème de chaîne de connexion

SingleOrDefault(ByVal expression As System.Linq.Expressions.Expression(Of System.Func(Of Company.filter, Boolean)), ByVal connectionString As String, ByVal providerName As String) 

Dans les sources subsoniques, ligne Database.cs 323:

instance = Activator.CreateInstance<T>(); 

Je pense que c'était la cause du problème dans mon cas. Il crée une instance avec le constructeur par défaut, puis le renvoie comme résultat, c'est là que nous perdons la chaîne de connexion personnalisée.

Personnellement, je fixe avec l'ajout de 2 lignes à modèle ActiveRecord.tt, en fonction SingleOrDefault, qui a l'argument connectionString:

  single._db=new <#=Namespace#>.<#=DatabaseName#>DB(connectionString, providerName); 
      single._repo = new SubSonicRepository<<#=tbl.ClassName#>>(single._db); 

Mais je pense que vous devriez examiner ce problème plus profond, Rob :)

Répondre

0

Je ne suis pas. Vous spécifiez le nom de ConnectionString est Settings.tt - c'est celui que nous utilisons.

+0

Oui, mais c'est la chaîne de connexion par défaut. Et la fonction SingleOrDefault appelée avec le paramètre ConnectionString personnalisé renvoie l'enregistrement, qui pointe vers la base de données incorrecte. Par exemple, j'ai plusieurs bases de données, qui ont une structure identique, mais elles sont utilisées séparément. Disons que j'ai les bases de données Company1 et Company2. Si j'utilise record.SingleOrDefault (x => x.name = "joe", GetConnectionStringForCompany2, ProviderName) il me retournera l'objet record qui pointe vers la base de données Company1, mais j'ai passé la chaîne de connexion pour la base de données Company2. J'espère que cela illustre la situation. – Nickname

Questions connexes