Entityframework .NET

使用 Entityframework 操作 Mysql 資料庫

周志衠 Jed Jhou 2019/11/12 09:06:16
152

使用 Entity Framework DB First 操作 Mysql

Entity Framework 是微軟所提供的 ORM 框架,目前支援 MsSQL、MySql、Oracle 和 PostgreSQL 等資料庫,EF 可透過各資料庫的資料提供者即可讓程式設計師使用一致的方式操作資料庫,下列示範為使用 EF6 DB First 操作 Mysql 資料庫。

環境準備

開發環境 - VS 2019 Community
專案環境 - .NETFramework,Version=v4.7.2

MySQL Server
Mysql connector/NET
MySQL for Visual Studio

安裝

  1. MySQL for Visual Studio,此工具可在 Visual studio 使用伺服器總管或 EF 模型精靈連線時提供 MySQL 資料來源選項

  1. 使用 nuget 套件管理工具下載 MySql.Data、MySql.Data.EntityFramework 套件

MySQL.Data 6.10 版本之前對應 EF 套件名稱為 MySql.Data.Entity,之後版本對應 EF 套件名稱為 MySql.Data.EntityFramework、MySQL.Data.EntityFrameworkCore。

確認本機上有安裝 Connector/NET,版本號需與 MySql.Data、MySql.Data.EntityFramework 相符,否則操作實體資料模型精靈時會出現閃退問題導致無法進行後續模型建立動作。

從 nuget 下載的套件版本一律為最新版本,後續因新專案而使用新版的 MySql.Data 套件和對應的 connector/NET,舊有專案會因 connector/NET 版本不符而出現資料模型精靈閃退問題(不影響既有專案操作資料庫能力),這時只要更新專案套件版本即可。

  1. 設定 config

添加以下設定至 app.config/web.config

<entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.18.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider"
           invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL"
           type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.18.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

注意 version 字段需與本機內的 connent/NET 版本相符。

  1. 按照以下步驟新增資料模型

  1. 資料庫操作

新增完實體資料模型後即可用 EF 操作 MySQL 資料庫

參考資料

MySQL 官方文件 9.1 Entity Framework 6 Support

余小章 @ 大內殿堂 MySQL @ Entity Framework 6

VS2017+EF+Mysql生成实体数据模型(解决闪退的坑)

周志衠 Jed Jhou