Gtk3アプリ RiderとMySqlとDapper

####前提条件

MySqlのインストール
MySql WorkBenchのインストール
DapeprをNuGetからインストール
DapperExtensionをNuGetからインストール


###MySQL WorkBenchでDBを作成する

RiderにMySqlに接続するツールがあり、スキーマ、テーブル、カラムが作成できます。
DBの作成の仕方がわからなかったため、MySql WorkBenchからDbだけを作成します

WorkBenchでDbだけ作成します。
<img width="500" alt="Screenshot from 2021-11-30 15-55-07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/a90e79a2-d65a-483b-e7a3-430f2ed4277e.png">
####DBへ接続
DBを作成したらRiderから接続します。
DataBaseにスキーマ名を記入します。
<img width="500" alt="Screenshot from 2021-11-30 16-01-43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/42232292-596a-f58e-df89-7a670e5ebfd0.png">
####Rider上のテーブルの作成
DBち(スキーマ)を作成するとテーブルを作成できるようになります。
<img width="400" alt="Screenshot from 2021-11-30 17-38-30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/63f25ffa-2385-a57e-3fe2-736dadf6eda8.png">
###Rider上でのDBの操作
カラムを追加したり、外部キーを追加したりできます。
<img width="300" alt="Screenshot from 2021-11-30 16-03-08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/9d6496c9-93a8-8c9c-5d2e-18e57bd05822.png">
####NuGetからMySql.Dataをダウンロード
NugetからMySqlクライアントMySql.Dataをインストールします
<img width="500" alt="Screenshot from 2021-11-30 16-13-05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/1b0a284e-fa06-94b3-2bae-3fd0e4414a26.png">
####スキーマからモデルを生成する
ここからソースをダウンロードし、Riderのフォルダの中に格納しすぐモデルファイルを作成できるようにします。
MySql用にカスタマイズしていきます。

https://github.com/olsh/datagrip-poco-generator/blob/master/Generate%20IPOCOs.groovy

右クリックから実行しモデルファイルを生成します。
<img width="300" alt="Screenshot from 2021-11-30 19-08-15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/b7617b56-17b3-7fd6-be35-8335a44227d9.png">
####テストソース

```cs
using System;
using System.Linq;
using MySql.Data.MySqlClient;
using Dapper;
using DapperExtensions;

namespace mySql
{
    class Program
    {
        public class test
        {
            public Int64 id { get; set; } = 0;
            public string code { get; set; } = null;
            public string name { get; set; } = null;
        }
       
        static void Main(string[] args)
        {
            
            MySqlConnectionStringBuilder b = new MySqlConnectionStringBuilder();
            b.Server = "localhost";
            b.Port = 3306;
            b.Database = "";
            b.UserID = "";
            b.Password = "";

            MySqlConnection con = new MySqlConnection(b.ConnectionString);
            //MySQL形式でSQLを書き出す
            DapperExtensions.DapperExtensions.SqlDialect = new DapperExtensions.Sql.MySqlDialect();

            //Dapperの_の入ったカラム名を有効にする。
            Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;

            con.Open();

            string sql = "select * from test;";

            var result = con.Query<test>(sql);

            foreach(var p in result) {
                Console.WriteLine("ID:" + p.id + " 名:" + p.name);
            }

            test test1 = new test();
            test1.name = "test2";
            test1.code = "java";
            con.Insert<test>(test1);

            string sql3 = "select * from test Where code = 'java';";
            var test_result2 = con.QueryAsync<test>(sql3);
            Console.WriteLine(test_result2.Result);

            foreach (test test_t in test_result2.Result)
            {
                con.Delete<test>(test_t);
            }

            var result5= con.QueryAsync<test>(sql);
            
            Console.WriteLine(" count " + result5.Result.Count());

            con.Close();

        }
    }
}
```

####MySqlの設定

Adavancedのところで変数を設定できます

<img width="500" alt="Screenshot from 2021-12-16 14-19-49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/e1805c7b-056c-7f42-5711-19ecae7d7cdb.png">


####課題

DapperExtensionのInsertAsyncなどAsync系が実行できなかった。

[Gtk3アプリ RiderとTypeScriptとGtk3アプリの連携 その１](https://qiita.com/iota_11/items/2f0f1b822e41c2bad289)に続く