2013-04-24 59 views

回答

3

我通常在我的app.config定义的连接字符串:

<connectionStrings> 
    <add name="connection1" connectionString="Data Source=;User ID=;Password=;" /> 
    <add name="connection2" connectionString="Data Source=;User ID=;Password=;" /> 
    </connectionStrings> 

然后创建2个独立的( nhibernate)配置文件与nhibernate配置(如果你有2个不同的数据库)。

我使用一个类,它允许我创建一个会话工厂:

public class NHibernateSessionFactory 
    { 
     private ISessionFactory sessionFactory; 

     private readonly string ConnectionString = ""; 
     private readonly string nHibernateConfigFile = ""; 

     public NHibernateSessionFactory(String connectionString, string nHConfigFile) 
     { 
      this.ConnectionString = connectionString; 
      this.nHibernateConfigFile = nHConfigFile; 
     } 

     public ISessionFactory SessionFactory 
     { 
      get { return sessionFactory ?? (sessionFactory = CreateSessionFactory()); } 
     } 

     private ISessionFactory CreateSessionFactory() 
     { 
      Configuration cfg; 
      cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, this.nHibernateConfigFile)); 

      // With this row below Nhibernate searches for the connection string inside the App.Config. 
      // cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName, System.Environment.MachineName); 
      cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString, this.ConnectionString); 

#if DEBUG 
      cfg.SetProperty(NHibernate.Cfg.Environment.GenerateStatistics, "true"); 
      cfg.SetProperty(NHibernate.Cfg.Environment.ShowSql, "true"); 
#endif 

      return (cfg.BuildSessionFactory()); 
     } 
    } 

现在,我可以创造出许多不同的会话工厂用自己的具体配置:

var sessionFactory1 = new NHibernateSessionFactory("connection string 1", "sql.nhibernate").SessionFactory; 

var sessionFactory2 = new NHibernateSessionFactory("connection string 2", "ora.nhibernate").SessionFactory; 

你可以找到更多信息here

1

对于每个数据库,您都需要一个自己的SessionFactory。如果省略的ConnectionString在新罕布什尔州的配置,你可以在代码中指定它在构建SessionFactory的:

var sessionFactory1 = new Configuration() 
        .Configure() 
        .SetProperty("connection.connection_string", "First Connection String").BuildSessionFactory(); 

var sessionFactory2 = new Configuration() 
        .Configure() 
        .SetProperty("connection.connection_string", "Second Connection String").BuildSessionFactory(); 
相关问题