LoginSignup
24
31

More than 3 years have passed since last update.

VisualStudioでMySQLにコードファーストで接続してみる

Last updated at Posted at 2017-07-24

VisualStudioでMySQLにコードファーストで接続してみる

開発環境

  • Visual Studio 2017 (C#)
  • EntityFramework 6.1.3
  • MySql.Data.Entity
    • MySql.Data.Entity 6.9.9
    • MySql.Data 6.9.9
  • Connector/Net (ADO.NET driver for MySQL) 6.9.9
  • MySQL for Visual Studio 1.2.7

初めに

ちょっと前までは、NuGetから「MySql.ConnectorNET.Data」と「MySql.ConnectorNET.Entity」をインストールして使用していましたが、今ではNuGetからどうやら取得できないようなので、VisualStudioからコードファーストでモデルを作成し、クラスアプリケーションとしてdllファイルを作成する場合の手順となります。

インストール

Connector/Net (ADO.NET driver for MySQL)

  • Connector/Net (ADO.NET driver for MySQL) を左記リンクからダウンロードし、インストールを行います。
  • Downloadボタンを押下します。
    WS000093.JPG

  • 既にアカウントを持っているのであれば、Loginボタンを押下します。

    • MySQLのサイトからのダウンロードは、アカウント持っていない場合は、Sign Upからアカウント作成する必要があります。 WS000094.JPG
  • ログイン後、DownLoad Nowボタンを押下します。

  • 「mysql-connector-net-6.9.9.msi」を実行します。

  • Nextボタンを押下します。
    WS000097.JPG

  • Typicalボタンを押下します。
    WS000098.JPG

  • Instrallボタンを押下します。
    WS000099.JPG

  • Finishボタンを押下します。
    WS000100.JPG

MySQL for Visual Studio

  • MySQL for Visual Studio を左記リンクからダウンロードし、インストールを行います。
  • Downloadボタンを押下します。
    WS000102.JPG

  • 「mysql-for-visualstudio-1.2.7.msi」を実行します。

  • Nextボタンを押下します。
    WS000103.JPG

  • Typicalボタンを押下します。
    WS000104.JPG

  • Instrallボタンを押下します。
    WS000105.JPG

  • Finishボタンを押下します。
    WS000106.JPG

クラスアプリケーションの作成

ソリューションの作成

  • クラス ライブラリ(.NET Framework)を選択し、名前を付けます。 WS000107.JPG

NuGetのインストール

  • 参照 右クリック > NuGetパッケージ 管理 から以下をインストール
    • EntityFramework
    • MySql.Data
    • MySql.Data.Entity WS000108.JPG

Modelsフォルダの作成

  • プロジェクトを右クリック > 追加 > 新しいフォルダー を選択
  • 「Models」を指定します。

EntityDataModelの作成

  • 「Models」フォルダを右クリック > 追加 > 新しい項目 を選択
  • データ > ADO.NET Entity Data Model を選択し、名前を指定し、追加
    • 今回は、「MySQLEntities」としています。
    • もし、途中でエラーになった場合は、下の方の手順のApp.configの編集を先に行ってください。

WS000109.JPG

  • 「データベースからCode first」を選択 > 次へ
    WS000110.JPG

  • 新しい接続ボタンを押下します。
    WS000111.JPG

  • データソースは、「MySQL Database」を選択 > 続行
    WS000112.JPG

  • 各接続情報を入力 > OK
    WS000113.JPG
    WS000114.JPG

  • 「はい、重要情報接続文字列に含めます。」を選択、「App.Configに保存」にチェックし、次へ
    WS000115.JPG

  • 必要テーブルにチェックを入れる > 完了
    WS000116.JPG

正しく登録できていれば、上記のようにテーブルやビューが選択できるようになります。

 追記(2021/01/12)
― 上の画面が出てこない場合は、App.configを一部修正が必要

App.config(変更前)
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, 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.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>
  • versionから後ろを削除
App.config(変更後)
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, 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.Entity.EF6"></provider>
    </providers>
  </entityFramework>

App.configの編集

  • 上記までの手順でできそうなのですが、エラーが発生する場合があるので、App.configに手を入れます。
  • 条件によっては、最初から記述済みの可能性があります。
App.config(変更前)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, 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.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="MySQLEntities" connectionString="server=*****;user id==*****;password==*****;port=****;persistsecurityinfo=True;database=cb_cbgrn" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
</configuration>
  • <system.data> タグから</system.data> タグを追加します。
  • entityFramework タグ内にcodeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6"を追加
App.config(変更後)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework  codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, 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.Entity.EF6, Version=6.9.9.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=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="MySQLEntities" connectionString="server=*****;user id==*****;password==*****;port=****;persistsecurityinfo=True;database=cb_cbgrn" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
</configuration>

リビルド

  • リビルド後、プロジェクト名のdllファイルが生成されているので、任意のWebAPIのサービスなどで参照することで、使用できるようになります。

まとめ

一旦、entitiesに入れてしまえば、MySQLとSQL ServerとのリレーションもLINQで行えるので、SQLServer上にMySQLのリンクサーバ立てるより、こちらの方法をとってWebサービス側のリポジトリでLINQで接続する方法が良いと思いました。

補足情報

8.2 Entity Framework 6 Support

Set the new DbConfiguration class for MySql. This step is optional but highly recommended, because it adds all the dependency resolvers for MySql classes. This can be done in three ways:

なので、今回は、3つ目の方式を採用しています。

24
31
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
31