C# NHibernate使用app.config中的现有连接字符串
我想使用连接字符串App.Config文件。也可以使用NHibernate连接到2个数据库(不同的连接字符串)吗?如果可以,如何使用?在保持2个不同的数据库连接的情况下,Frederik Gheyses的链接是最好的答案 AFAIK无法使用标准App.config格式,如: App.configC# NHibernate使用app.config中的现有连接字符串,c#,nhibernate,configuration,connection-string,C#,Nhibernate,Configuration,Connection String,我想使用连接字符串App.Config文件。也可以使用NHibernate连接到2个数据库(不同的连接字符串)吗?如果可以,如何使用?在保持2个不同的数据库连接的情况下,Frederik Gheyses的链接是最好的答案 AFAIK无法使用标准App.config格式,如: App.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> &l
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="ConnString1" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=NhibernateDB;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
NHibernate提供了3种读取配置信息的方法:
从App.config文件读取配置。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</configSections>
<!-- NHibernate Configuration -->
<nhibernate>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/>
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>
<add key="hibernate.connection.connection_string" value="Data Source=(local)\sqlexpress;Initial Catalog=NHibernateDB;user=sa;Password=;Integrated Security=true"/>
</nhibernate>
</configuration>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<!-- NHibernate Configuration -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=(local)\sqlexpress;Initial Catalog= NHibernateDB;user=sa;Password=;Integrated Security=True;</property>
<mapping assembly="NHibernate_Test.BO"/>
</session-factory>
</hibernate-configuration>
</configuration>
改进了从App.config文件读取配置的方法。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</configSections>
<!-- NHibernate Configuration -->
<nhibernate>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/>
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>
<add key="hibernate.connection.connection_string" value="Data Source=(local)\sqlexpress;Initial Catalog=NHibernateDB;user=sa;Password=;Integrated Security=true"/>
</nhibernate>
</configuration>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<!-- NHibernate Configuration -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=(local)\sqlexpress;Initial Catalog= NHibernateDB;user=sa;Password=;Integrated Security=True;</property>
<mapping assembly="NHibernate_Test.BO"/>
</session-factory>
</hibernate-configuration>
</configuration>
NHibernate.Connection.DriverConnectionProvider
NHibernate.dialogue.mssql2005dialogue
NHibernate.Driver.SqlClientDriver
数据源=(本地)\sqlexpress;初始目录=NHibernateDB;用户=sa;密码=;综合安全=真实;
从hibernate.cfg.xml文件读取配置
App.config
hibernate.cfg.xml
NHibernate.Connection.DriverConnectionProvider
NHibernate.dialogue.mssql2000方言
NHibernate.Driver.SqlClientDriver
数据源=。\SQLEXPRESS;初始目录=NHibernateDB;用户=sa;密码=;集成安全性=真
假的
我建议您在代码中加载配置信息,如下所示:
public sealed class Persister : System.IDisposable
{
private NHibernate.ISessionFactory _sessionFactory;
/// <summary> Configures NHibernate to access the data source and map entities to tables. </summary>
public Persister()
{
System.Console.Out.WriteLine("Configuration of NHibernate...\n");
const string connectionString = @"Data Source=(local)\sqlexpress;Initial Catalog=nhibernate;Integrated Security=SSPI";
// Enable the logging of NHibernate operations
log4net.Config.XmlConfigurator.Configure();
// Create the object that will hold the configuration settings
// and fill it with the information to access to the database
NHibernate.Cfg.Configuration configuration = new NHibernate.Cfg.Configuration();
configuration.Properties[NHibernate.Cfg.Environment.ConnectionProvider] = "NHibernate.Connection.DriverConnectionProvider";
System.Console.Out.WriteLine("Use SQL Server database: ConnectionString = <"
+ connectionString + ">\n");
// These are the three lines of code to change in order to use another database
configuration.Properties[NHibernate.Cfg.Environment.Dialect] = "NHibernate.Dialect.MsSql2000Dialect";
configuration.Properties[NHibernate.Cfg.Environment.ConnectionDriver] = "NHibernate.Driver.SqlClientDriver";
configuration.Properties[NHibernate.Cfg.Environment.ConnectionString] = connectionString;
// Use NHibernate.Mapping.Attributes to create mapping information about our entities
System.Console.Out.WriteLine("Generating the mapping information for NHibernate...\n");
NHibernate.Mapping.Attributes.HbmSerializer.Default.Validate = true; // Enable validation (optional)
using (System.IO.MemoryStream stream = NHibernate.Mapping.Attributes.HbmSerializer.Default.Serialize(System.Reflection.Assembly.GetExecutingAssembly()))
{
configuration.AddInputStream(stream); // Send the mapping information to NHibernate configuration
}
// Create the table in the database for the entity Message
System.Console.Out.WriteLine("Creating the table in the database for the entity Message...");
new NHibernate.Tool.hbm2ddl.SchemaExport(configuration).Create(true, true);
// Build the SessionFactory
System.Console.Out.WriteLine("\n\nBuilding the session factory, end of the configuration\n\n");
_sessionFactory = configuration.BuildSessionFactory();
}
public void Dispose()
{
// Do not forget to close the session factory when you are done with it
_sessionFactory.Close();
}
公共密封类持久器:System.IDisposable
{
私立NHibernate.ISessionFactory(美国)sessionFactory ;;
///将NHibernate配置为访问数据源并将实体映射到表。
公共持久器()
{
System.Console.Out.WriteLine(“NHibernate的配置…\n”);
常量字符串连接字符串=@“数据源=(本地)\sqlexpress;初始目录=nhibernate;集成安全性=SSPI”;
//启用NHibernate操作的日志记录
log4net.Config.XmlConfigurator.Configure();
//创建将保存配置设置的对象
//并用访问数据库的信息填充它
NHibernate.Cfg.Configuration Configuration=新的NHibernate.Cfg.Configuration();
configuration.Properties[NHibernate.Cfg.Environment.ConnectionProvider]=“NHibernate.Connection.DriverConnectionProvider”;
System.Console.Out.WriteLine(“使用SQL Server数据库:ConnectionString=\n”);
//为了使用另一个数据库,需要更改这三行代码
configuration.Properties[NHibernate.Cfg.Environment.dialogue]=“NHibernate.dialogue.mssql2000dialogue”;
Properties[NHibernate.Cfg.Environment.ConnectionDriver]=“NHibernate.Driver.SqlClientDriver”;
configuration.Properties[NHibernate.Cfg.Environment.ConnectionString]=ConnectionString;
//使用NHibernate.Mapping.Attributes创建有关实体的映射信息
System.Console.Out.WriteLine(“生成NHibernate的映射信息…\n”);
NHibernate.Mapping.Attributes.HbmSerializer.Default.Validate=true;//启用验证(可选)
使用(System.IO.MemoryStream stream=NHibernate.Mapping.Attributes.HbmSerializer.Default.Serialize(System.Reflection.Assembly.getExecutionGassembly()))
{
AddInputStream(stream);//将映射信息发送到NHibernate配置
}
//在数据库中为实体消息创建表
System.Console.Out.WriteLine(“在数据库中为实体消息创建表…”);
新的NHibernate.Tool.hbm2ddl.SchemaExport(配置).Create(true,true);
//构建SessionFactory
System.Console.Out.WriteLine(“\n\n正在构建会话工厂,配置结束”);
_sessionFactory=configuration.BuildSessionFactory();
}
公共空间处置()
{
//完成会话工厂后,不要忘记关闭它
_sessionFactory.Close();
}
您可以创建多个iSessionFactory;每个要连接的数据库对应一个iSessionFactory
检查。可以使用。您可以使用原始连接字符串、应用程序设置或从ConnectionString部分读取。从ConnectionString部分读取的示例如下:
ISessionFactory factory = Fluently.Configure()
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyClass>())
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(c => c.FromConnectionStringWithKey("connectionStringKey"))
.BuildSessionFactory();
ISessionFactory=Fluently.Configure()
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(c=>c.FromConnectionStringWithKey(“connectionStringKey”))
.BuildSessionFactory();
正如Frederik提到的,您可以通过配置多个会话工厂来处理多个数据库。关于问题的第一部分:
<property name="connection.connection_string_name">ConnStringName</property>
ConnStringName
然后像往常一样声明您的
。@JMSA是错误的。回答第一个问题:这对我来说很好,并且在使用VS2010的MSDeploy情况下可能很有用,因为根据是否为开发/UAT/prod等构建包,可以添加替代的连接字符串值。