首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Castle ActiveRecord 實戰(2):配置管理全攻略——三種配置來源、資料庫方言對照與 Web 應用最佳實踐

     編輯:關於.NET

配置核心:NHibernate ADO.NET 屬性

ActiveRecord 底層封裝 NHibernate,配置項與 NHibernate 完全一致:

屬性鍵說明範例值
hibernate.connection.driver_classADO.NET 驅動類別NHibernate.Driver.SqlClientDriver
hibernate.dialectSQL 方言(關鍵!決定 SQL 生成語法)NHibernate.Dialect.MsSql2000Dialect
hibernate.connection.provider連接提供者NHibernate.Connection.DriverConnectionProvider
hibernate.connection.connection_string資料庫連接字串Data Source=.;Initial Catalog=Test;Integrated Security=SSPI
hibernate.connection.isolation交易隔離級別ReadCommitted

常用資料庫方言對照表(必收藏)

資料庫Dialect 類別
Microsoft SQL Server 2000/2005/2008NHibernate.Dialect.MsSql2000Dialect / MsSql2005Dialect / MsSql2008Dialect
Oracle 9i/10g/11gNHibernate.Dialect.Oracle9Dialect / Oracle10gDialect
MySQL 5.xNHibernate.Dialect.MySQLDialect / MySQL5Dialect
PostgreSQLNHibernate.Dialect.PostgreSQLDialect
FirebirdNHibernate.Dialect.FirebirdDialect
SQLiteNHibernate.Dialect.SQLiteDialect
DB2NHibernate.Dialect.DB2Dialect
SybaseNHibernate.Dialect.SybaseDialect

提示:指定正確 Dialect 可自動啟用該資料庫特有功能(如 Limit/Offset、Sequence、鎖定語法),避免手工配置大量參數。

三種配置來源方式

方式一:XmlConfigurationSource(獨立 XML 檔,推薦)

MyConfig.xml:

<?xml version="1.0" encoding="utf-8"?>
<activerecord>
  <config>
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
    <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
    <add key="hibernate.connection.connection_string" value="Data Source=.;Initial Catalog=ARDemo;Integrated Security=SSPI" />
  </config>
</activerecord>

程式碼初始化:

var source = new XmlConfigurationSource("MyConfig.xml");
ActiveRecordStarter.Initialize(source, typeof(Blog), typeof(Post));

建構子多載:支援檔案路徑、Stream、TextReader。建置後事件複製 XML 至輸出目錄:

copy "$(ProjectDir)\*.xml" "$(TargetDir)"

方式二:InPlaceConfigurationSource(硬編碼,適合動態配置)

var source = new InPlaceConfigurationSource();
var props = new Hashtable {
    ["hibernate.connection.driver_class"] = "NHibernate.Driver.SqlClientDriver",
    ["hibernate.dialect"] = "NHibernate.Dialect.MsSql2000Dialect",
    ["hibernate.connection.provider"] = "NHibernate.Connection.DriverConnectionProvider",
    ["hibernate.connection.connection_string"] = "Data Source=.;Initial Catalog=ARDemo;UID=sa;Password=sa"
};
source.Add(typeof(ActiveRecordBase), props);
ActiveRecordStarter.Initialize(source, typeof(Blog));

適用於連接字串需運行時動態決定(如多租戶切換資料庫)的場景。

方式三:應用程式配置檔(Web.config/App.config,最常用)

配置區段註冊:

<configSections>
  <section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
</configSections>

配置內容:

<activerecord>
  <config>
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
    <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
    <add key="hibernate.connection.connection_string" value="Data Source=.;Initial Catalog=ARDemo;Integrated Security=SSPI" />
  </config>
</activerecord>

初始化代碼:

// .NET Framework 2.0+
var source = (IConfigurationSource)ConfigurationManager.GetSection("activerecord");
ActiveRecordStarter.Initialize(source, typeof(Blog), typeof(Post));

Web 應用特別設定:isWeb="true"

在 <activerecord isWeb="true"> 啟用 Web 模式,自動配合 HTTP Request 生命週期管理 SessionScope:

<activerecord isWeb="true">
  <config>...</config>
</activerecord>

Global.asax 初始化:

protected void Application_Start(object sender, EventArgs e) {
    var source = (IConfigurationSource)ConfigurationManager.GetSection("activerecord");
    ActiveRecordStarter.Initialize(source, typeof(Blog), typeof(Post));
}

常見資料庫完整配置範本

SQL Server
<activerecord>
  <config>
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
    <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
    <add key="hibernate.connection.connection_string" value="Data Source=.;Initial Catalog=Test;UID=sa;Password=sa" />
  </config>
</activerecord>
Oracle
<activerecord>
  <config>
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.OracleClientDriver" />
    <add key="hibernate.dialect" value="NHibernate.Dialect.OracleDialect" />
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
    <add key="hibernate.connection.connection_string" value="Data Source=ORCL;User ID=scott;Password=tiger" />
  </config>
</activerecord>
MySQL
<activerecord>
  <config>
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.MySqlDataDriver" />
    <add key="hibernate.dialect" value="NHibernate.Dialect.MySQLDialect" />
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
    <add key="hibernate.connection.connection_string" value="Server=localhost;Database=test;Uid=root;Pwd=123456" />
  </config>
</activerecord>
PostgreSQL
<activerecord>
  <config>
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.NpgsqlDriver" />
    <add key="hibernate.dialect" value="NHibernate.Dialect.PostgreSQLDialect" />
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
    <add key="hibernate.connection.connection_string" value="Server=127.0.0.1;Port=5432;Database=test;User Id=postgres;Password=123456" />
  </config>
</activerecord>

總結

配置管理是 ActiveRecord 專案的基石。推薦使用 Web.config/App.config 搭配 isWeb="true" 進行 Web 專案部署;獨立元件庫或測試專案適合 XmlConfigurationSource;動態多資料庫場景用 InPlaceConfigurationSource。務必根據目標資料庫選擇正確 Dialect,這是避免 SQL 語法錯誤的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved