管理多个NHibernate会话/工作单元

管理多个NHibernate会话/工作单元,nhibernate,fluent-nhibernate,unit-of-work,Nhibernate,Fluent Nhibernate,Unit Of Work,我是NHibernate的新手,我正在尝试提出一个好的模式,用于在NHibernate会话中使用工作单元模式,但允许使用不同的连接字符串来连接不同的数据库/作为不同的用户 我倾向于工厂模式,因为我需要它来与Oracle和SQL Server一起工作 我正在使用流利的NHibernate 有什么建议吗?您需要为每个连接字符串使用不同配置的不同ISessionFactory 下面是ISessionFactory的一个非常粗略的实现。请注意,配置可能在许多方面不同(例如在DLL范围内),而不仅仅是连接

我是NHibernate的新手,我正在尝试提出一个好的模式,用于在NHibernate会话中使用工作单元模式,但允许使用不同的
连接字符串来连接不同的数据库/作为不同的用户

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

我正在使用流利的NHibernate


有什么建议吗?

您需要为每个连接字符串使用不同配置的不同ISessionFactory

下面是ISessionFactory的一个非常粗略的实现。请注意,配置可能在许多方面不同(例如在DLL范围内),而不仅仅是连接字符串。因此,您可能很快需要将整个
configuresection
传递给您的
\u buildConfiguration
,或者由自定义IMyConfigurationBuilder实现
\u 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;
}

希望这会有所帮助

您需要为每个连接字符串使用不同配置的ISessionFactory

下面是ISessionFactory的一个非常粗略的实现。请注意,配置可能在许多方面不同(例如在DLL范围内),而不仅仅是连接字符串。因此,您可能很快需要将整个
configuresection
传递给您的
\u buildConfiguration
,或者由自定义IMyConfigurationBuilder实现
\u 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;
}
希望这会有所帮助