2009-10-01 5 views
1

comment puis-je obtenir une référence à SqlConnection ou Sqlconnection en cours dans config?Comment faire référence à SqlConnection (ou chaîne de connexion) dans Castle ActiveRecord?

Je trouve http://svn.castleproject.org:8080/svn/castle/trunk/ActiveRecord/Castle.ActiveRecord.Tests/DifferentDatabaseScopeTestCase.cs

et le code

private string GetSqlConnection() 
     { 
      IConfigurationSource config = GetConfigSource(); 

      IConfiguration db2 = config.GetConfiguration(typeof(ActiveRecordBase)); 

      string conn = string.Empty; 

      foreach (IConfiguration child in db2.Children) 
      { 
       if (child.Name == "connection.connection_string") 
       { 
        conn = child.Value; 
       } 
      } 

      return conn; 
     } 

Mais je ne comprends pas où je peux trouver la mise en œuvre "GetConfigSource"? Est-ce fonction standart Castle auxiliaire ou non?

-je utiliser ces espaces de noms

using Castle.ActiveRecord; 
using NHibernate.Criterion; 
using NHibernate; 
using Castle.Core.Configuration; 
using Castle.ActiveRecord.Framework; 

Répondre

-1

je devais doanload sources AR de svn pour le résoudre.

Cela signifie

System.Configuration.ConfigurationManager.GetSection("activerecord") as IConfigurationSource; 
2
var sfimpl = ActiveRecordMediator.GetSessionFactoryHolder() 
           .GetSessionFactory(typeof(object)); 
IDbConnection conn = ((ISessionFactoryImplementor)sfimpl) 
         .ConnectionProvider.GetConnection(); 
+0

J'ai eu quelques problèmes avec cette méthode. Mais de toute façon, merci – VoimiX

+0

Je pense que c'est démodé. Il n'y a pas * ConnectionProvider * dans * ISessionFactory *. – oillio

+0

@oillio: en effet. Je viens de mettre à jour ma réponse, faites un essai. –

0

La méthode que je trouve pour obtenir la chaîne était:

public static string GetConnectionString() { 
     using (var session = ActiveRecordMediator 
          .GetSessionFactoryHolder() 
          .GetSessionFactory(typeof(ActiveRecordBase)) 
          .OpenSession()) 
     { 
      return session.Connection.ConnectionString; 
     } 
    } 

Cela peut être inefficace pour ouvrir une session pour obtenir la chaîne de connexion. Y a-t-il un autre endroit pour le trouver?

+0

Cela ne donne pas le mot de passe non plus. – Justin

1

Je l'utiliser comme ceci dans mon projet:

public static MySqlConnection GetConnection() 
    { 
     if (_session == null) 
     { 
      _session = ActiveRecordMediator.GetSessionFactoryHolder().CreateSession(typeof(ActiveRecordBase)); 
     } 
     var connection = (MySqlConnection)_session.Connection; 
     if (connection.State == ConnectionState.Closed) 
      connection.Open(); 
     //var connection = new MySqlConnection(Connstr); 
     //connection.Open(); 
     return connection; 
    } 

    public static void CloseActiveIsession() 
    { 
     if (_session != null) 
     { 
      ActiveRecordMediator.GetSessionFactoryHolder().ReleaseSession(_session); 
     } 
    } 
Questions connexes