2013-04-24 45 views
1

我对NHibernate相当新颖,我试图想出一个很好的模式,使用工作单元模式与NHibernate会话,但允许使用不同的Connection Strings连接到不同的数据库/作为不同的用户。管理多个NHibernate会话/ UnitOfWork

我倾向于工厂模式,因为我需要这个与Oracle和SQL Server一起工作。

我正在使用流利的NHibernate。

有什么建议吗?

回答

1

对于每个连接字符串,您将需要不同的ISessionFactory(来自不同的配置)。

这是ISessionFactory Factory的一个非常粗糙的实现。请注意,配置可能在许多方面有所不同(例如在DLL作用域中),而不仅仅是连接字符串。因此,您可能很快需要将整个configSection传递给您的_buildConfiguration,或者通过自定义IMyConfigurationBuilder实现_buildConfiguration

// The main method to be called with "oracle" or "sqlserver" as parameter 
public NHibernate.ISessionFactory BuildSessionFactory(string configName) 
{ 
    return GetConfiguration(configName).BuildSessionFactory(); 
} 

public NHibernate.Cfg.Configuration GetConfiguration(string configName) 
{ 
    switch (configName) 
    { 
     case "oracle": return _buildConfiguration("connectionstringtoOracleFromApplicationConfig"); 
     case "sqlserver": return _buildConfiguration("connectionstringtoSqlserverFromApplicationConfig"); 
    } 
    return null; 
} 

private NHibernate.Cfg.Configuration _buildConfiguration(string connectionString) 
{ 
    var cfg = new Configuration(); 
    //. 
    //. 
    cfg.Properties.Add("connection.connection_string", connectionString); 
    //. 
    //. 
    return cfg; 
} 

希望这将有助于