川崎モンスター

プログラムなどの技術的な内容をまとめていきます

【C#】ASP.NET CoreでMySQLを利用する(MySQL接続設定編)

f:id:madsoldiers:20171022202701p:plainf:id:madsoldiers:20171022202308j:plain

 

こんにちは、川崎モンスターのまっずです。

今回は、前回の続きで、asp.net CoreからMicrosoftのSQLサーバーではなく、オラクルのMySQLに接続する設定について記載していきます。

kawasaki-monster.hatenablog.jp

appsettings.json の設定を変更する

appsettings.jsonに、接続するSQLサーバーの設定が書かれています。

  "ConnectionStrings": { 
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-AspDotnetCoreUseMysql-D9EF79D3-6967-4E36-818B-2300E3C6725E;Trusted_Connection=True;MultipleActiveResultSets=true" 
  },

これを下記のように変更します。

  "ConnectionStrings": {
    "DefaultConnection": "server=localhost;userid=username;password=password;database=mydatabase;"
  },

usernamepasswordは、MySQL側で設定した値(インストール時、或いはMySQL Workbench 6.3 CEで設定した値)にしてください。

これで、MySQL側のmydatabaseにusernameとpasswordで接続する事前設定が完了しました。

MySQLに接続するように変更する

さて、ここからが一番私が苦労したところです。

今のところ、asp.net CoreからMySQLに接続する方法は、2通りあります。

それぞれの方法についてご説明します。

その①  MySQL.Data.EntityFrameworkCoreを使う方法

こちらは、オラクル公式のものです。これを利用する方法をご説明します。

まず、ソリューションエクスプローラの プロジェクト名を右クリックし、[Nugetパッケージの管理(N)...]を選択します。

f:id:madsoldiers:20171023001508p:plain

表示された画面の上部に「参照」「インストール済み」「更新プログラム」とあるので、「参照」を選択します。そして、検索窓に「MySQL.Data.EntityFrameworkCore」と入力すると、一番表示部分に「MySQL.Data.EntityFrameworkCore 作成者:Oracle」とアイテムが表示されるので、これをインストールします。

f:id:madsoldiers:20171023001728p:plain

f:id:madsoldiers:20171023002044p:plain

ライセンス への同意画面も表示されるので、同意するボタンを押します。

次に、ソリューションエクスプローラから、「Startup.cs」を開きます。

そして、以下をusingします。

using MySQL.Data.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;

また、同じくStartup.csのUseSqlServerの部分をUseMySQLに変更します。

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
     services.AddDbContext(options =>
        options.UseMySQL(Configuration.GetConnectionString("DefaultConnection")));

 

これで一旦ビルドして実行してみると、下記のようにエラーになってしまいます。

f:id:madsoldiers:20171023003215p:plain

表示されているエラーメッセージは下記です。

System.TypeLoadException: 'Method 'Clone' in type 'MySQL.Data.EntityFrameworkCore.Infraestructure.Internal.MySQLOptionsExtension' from assembly 'MySql.Data.EntityFrameworkCore, Version=8.0.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' does not have an implementation.'

その理由が、現在OracleのMySQLコネクタと.NET Core 2.0に問題があるようで、上記のエラーメッセージが表示されるようです。つまり、Oracle純正のMySQL.Data.EntityFrameworkCoreは、asp.NET Core 2.0では今のところ利用できないことが分かりました。

 

さて次回は、これを解決するもう1つの方法についてご紹介します。