首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Microsoft Enterprise Library 5.0 整合 MySQL 完整配置指南

     編輯:MySQL 資料庫相關知識

背景

Enterprise Library(EntLib)5.0 預設僅內建 SQL Server、Oracle 等數據庫提供者。要在 EntLib 框架下使用 MySQL,需實現自定義 Database 與 DatabaseData 類,並通過配置文件註冊提供者映射。本文基於 EntLibContrib MySQL 擴展項目(MySQLDAAB)說明完整集成步驟。

核心代碼修改(MySQLDAAB 項目)

1. 實現 MySQLDatabaseData 配置類

public class MySQLDatabaseData : DatabaseData
{
    public MySQLDatabaseData(ConnectionStringSettings connectionStringSettings, 
                             IConfigurationSource configurationSource)
        : base(connectionStringSettings, configurationSource) { }

    public override IEnumerable GetRegistrations()
    {
        yield return new TypeRegistration(
            () => new MySQLDatabase(
                ConnectionString,
                Container.Resolved(Name)))
        {
            Name = Name,
            Lifetime = TypeRegistrationLifetime.Transient
        };
    }
}

2. 完善 MySQLDatabase 實現類

[ConfigurationElementType(typeof(MySQLDatabaseData))]
public class MySQLDatabase : Database
{
    public MySQLDatabase(string connectionString)
        : base(connectionString, MySqlClientFactory.Instance) { }

    public MySQLDatabase(string connectionString, IDataInstrumentationProvider instrumentationProvider)
        : base(connectionString, MySqlClientFactory.Instance, instrumentationProvider) { }
}

關鍵點:

  • [ConfigurationElementType] 屬性將配置元素類型綁定至 MySQLDatabaseData,使 EntLib 配置系統能識別自定義節點。
  • 構造函數透傳 MySqlClientFactory.Instance,確保使用 MySQL Connector/NET 的 ADO.NET 提供者工廠。

3. 編譯 MySQLDAAB 項目

生成 MySQLDAAB.dll 與 EntLibContrib.Data.MySql.dll,供主項目引用。

應用項目配置(app.config / web.config)

1. 配置節聲明

<configSections>
  <section name="dataConfiguration"
           type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings,
                 Microsoft.Practices.EnterpriseLibrary.Data" />
</configSections>

2. 提供者映射註冊

<dataConfiguration>
  <providerMappings>
    <add name="MySql.Data.MySqlClient"
         databaseType="EntLibContrib.Data.MySql.MySqlDatabase, MySQLDAAB" />
  </providerMappings>
</dataConfiguration>

3. DbProviderFactories 註冊(關鍵)

<system.data>
  <DbProviderFactories>
    <add name="MySql Data Provider Factory"
         invariant="MySql.Data.MySqlClient"
         description=".NET Framework Data Provider for MySQL"
         type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
  </DbProviderFactories>
</system.data>

說明: invariant 名稱必須與 providerMappings 中的 name 完全一致,且與連接字符串 providerName 對應。

4. 連接字符串配置

<connectionStrings>
  <add name="TestDB_MySQL"
       connectionString="server=127.0.0.1;database=test;User Id=root;Password=****;Persist Security Info=True;"
       providerName="MySql.Data.MySqlClient" />
</connectionStrings>

使用方式

// 通過 EntLib 統一入口獲取 Database 實例
Database db = EnterpriseLibraryContainer.Current.GetInstance("TestDB_MySQL");

// 執行查詢
using (IDataReader reader = db.ExecuteReader(CommandType.Text, "SELECT * FROM users"))
{
    while (reader.Read()) { /* ... */ }
}

// 執行非查詢
int affected = db.ExecuteNonQuery(CommandType.Text, "UPDATE users SET last_login = NOW() WHERE id = @id",
    db.CreateParameter("@id", 123));

常見問題排查

現象原因解決
ActivationException: 未找到類型程序集未引用或版本不匹配確認 MySQLDAAB、MySql.Data、EntLib 核心程序集版本一致,且 Copy Local = true
ConfigurationErrorsException: providerMappinginvariant 名稱不一致檢查 system.data/providerMappings/connectionStrings 三處 providerName 完全一致
MySqlException: Unable to connect連接字符串錯誤/防火牆/權限驗證 server、port、uid、pwd、sslmode 參數;測試網絡連通性

版本兼容性提示

  • EntLib 5.0 要求 .NET Framework 3.5 SP1+
  • MySQL Connector/NET 6.9+ / 8.0+ 均兼容,建議使用 NuGet 管理 MySql.Data 依賴
  • EntLibContrib 社區版本更新較慢,若遇 .NET Core/.NET 5+ 遷移場景,建議改用 Microsoft.Extensions.Configuration + Dapper/EFCore 輕量級方案。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved