我对 NHibernate 相当陌生,我正在尝试提出一个很好的模式来使用 NHibernate 会话的工作单元模式,但允许使用不同Connection Strings
的方式连接到不同的数据库/作为不同的用户。
我倾向于工厂模式,因为我需要它来与 Oracle 和 SQL Server 一起工作。
我正在使用流畅的 NHibernate。
有什么建议么?
我对 NHibernate 相当陌生,我正在尝试提出一个很好的模式来使用 NHibernate 会话的工作单元模式,但允许使用不同Connection Strings
的方式连接到不同的数据库/作为不同的用户。
我倾向于工厂模式,因为我需要它来与 Oracle 和 SQL Server 一起工作。
我正在使用流畅的 NHibernate。
有什么建议么?
对于每个连接字符串,您将需要来自不同配置的不同 ISessionFactory。
这是 ISessionFactory 工厂的一个非常粗略的实现。请注意,配置可能在许多方面有所不同(例如在 DLL 范围内),而不仅仅是连接字符串。因此,您可能很快需要将一个整体传递configSection
给您的_buildConfiguration
,或者已经_buildConfiguration
通过自定义 IMyConfigurationBuilder 实现。
// 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;
}
希望这会有所帮助