管理多个NHibernate Sessions / UnitOfWork

时间:2013-04-24 00:35:32

标签: nhibernate fluent-nhibernate unit-of-work

我对NHibernate相当新,我试图想出一个很好的模式来使用NHibernate Sessions的工作单元模式,但是允许使用不同的Connection Strings连接到不同的数据库/作为不同的用户。

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

我正在使用Fluent NHibernate。

有什么建议吗?

1 个答案:

答案 0 :(得分: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;
}

希望这会有所帮助

相关问题