2013-04-24 109 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; 
} 

希望這將有助於