こんにちは、川崎モンスターのまっずです。
今回は、前回の続きで、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;" },
※usernameとpasswordは、MySQL側で設定した値(インストール時、或いはMySQL Workbench 6.3 CEで設定した値)にしてください。
これで、MySQL側のmydatabaseにusernameとpasswordで接続する事前設定が完了しました。
MySQLに接続するように変更する
さて、ここからが一番私が苦労したところです。
今のところ、asp.net CoreからMySQLに接続する方法は、2通りあります。
それぞれの方法についてご説明します。
その① MySQL.Data.EntityFrameworkCoreを使う方法
こちらは、オラクル公式のものです。これを利用する方法をご説明します。
まず、ソリューションエクスプローラの プロジェクト名を右クリックし、[Nugetパッケージの管理(N)...]を選択します。
表示された画面の上部に「参照」「インストール済み」「更新プログラム」とあるので、「参照」を選択します。そして、検索窓に「MySQL.Data.EntityFrameworkCore」と入力すると、一番表示部分に「MySQL.Data.EntityFrameworkCore 作成者:Oracle」とアイテムが表示されるので、これをインストールします。
ライセンス への同意画面も表示されるので、同意するボタンを押します。
次に、ソリューションエクスプローラから、「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")));
これで一旦ビルドして実行してみると、下記のようにエラーになってしまいます。
表示されているエラーメッセージは下記です。
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つの方法についてご紹介します。