Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate使用app.config中的现有连接字符串_C#_Nhibernate_Configuration_Connection String - Fatal编程技术网

C# NHibernate使用app.config中的现有连接字符串

C# 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

我想使用连接字符串App.Config文件。也可以使用NHibernate连接到2个数据库(不同的连接字符串)吗?如果可以,如何使用?

在保持2个不同的数据库连接的情况下,Frederik Gheyses的链接是最好的答案

AFAIK无法使用标准App.config格式,如:

App.config

<?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等构建包,可以添加替代的连接字符串值。