このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

【M1 Mac】dotnet ef ツールで、MySQLを scaffoldする。

C#

2021.10.17

どもです。

最近もっぱらC#を書いている日々です。

なぜかと言うと長いので割愛させて頂きますが、ざっと説明すると、Webの未来の一つとしてWebassemblyの技術があるかと思いますが、そのWebassemblyを用いて、UnityとWebの連携を色々と模索しながら行っているうちに、UnityやらBlazorやらを扱っている訳です。

で、こちらのBlazorの書籍を進めていたところぶつかったのが、「第9章 データベースアクセス」の章。

created by Rinker
¥1,540 (2021/11/29 20:09:21時点 Amazon調べ-詳細)

9.2 SQLSeverの利用で、ずっとMySQLと思って進めていたのですが、全然うまくいかず。。

よくよく見ると、「Microsoft SQL Server」っていうのがあって、それではないかw

そういうのがあるのか。。(Microsoftのエコシステムにあまり触れていないので。。)

Parallels Desktop(Arm windows)のVisual Studioでやり直すと、すんなりいきました。

で、本題なのですが、M1 Mac(Intel Macも同様)で開発進めたい上に、dotnet ef ツールで「MySQL」をscaffoldしたい。

と言ったところです。

上記の本書では、MySQLのscaffoldはできないと記載されていましたが、調べるとできそうで、やってみたところ成功しましたので、そのログでもと。

ベースは、MySQLの公式ドキュメントの 7.2.2 Scaffolding an Existing Database in EF Core を参考にしていますが、そのままだと失敗していたので、バージョンを変更しています。

MySQLデータ準備

MySQLのデータを準備します。こちらも詳細は割愛させていただきます。

上記のサンプルデータのように、データベース名は「blazordb」、テーブルは「books」で作成しております。

データベース名、テーブル名などMySQL側の設定やデータは任意でお願いします。

.NET Core CLIを用いてMySQLをScaffolding

まずはともあれ、dotnetコマンドが使用できる状態にします。
dotnet efツールを使用します。

$ dotnet ef

上記のコマンドで以下の表示になればツールは使用できます。

表示しなければ、dotnet efをグローバルインストールします。

$ dotnet tool install —global dotnet-ef

とりあえず、MySQLをScaffoldingしたいだけなので、小さく .NET Core command-line interface (CLI)プロジェクトとして開始します。
ディレクトリが作成されたらそちらに移動。

$ dotnet new console -o sakilaConsole
$ cd sakilaConsole

続いて、EFコア用の MySQL NuGet パッケージである「MySql.EntityFrameworkCore」を追加します。
ここで、公式のドキュメントに記載しているパッケージだとメソッドがないぞ。とエラー吐いていましたので、特にバージョン指定せず、最新を入れることによって、エラーが回避されました。

MySql.EntityFrameworkCore」「MySql.Data.EntityFrameworkCore」「Microsoft.EntityFrameworkCore.Tools」をそれぞれ追加。

$ dotnet add package MySql.EntityFrameworkCore
$ dotnet add package MySql.Data.EntityFrameworkCore
$ dotnet add package Microsoft.EntityFrameworkCore.Tools

「dotnet restore」コマンドで、プロジェクトファイルで指定されている依存関係やプロジェクト固有のツールを復元します。

$ dotnet restore

MySQL接続文

dotnet efツールで、MySQLをScaffoldingする為に、必要なNuGet パッケージを追加しましたので、dotnet efで実際に行っていきます。
Scaffoldingする為に必要なコマンドはMySQL公式ドキュメントに記載されている以下のとおりとなります。

$ dotnet ef dbcontext scaffold "connection-string" MySql.EntityFrameworkCore -o sakila -f

ここで、記載されている「”connection-string”」箇所に、MySQL接続文字列がはいるのですが、MySQLの公式ドキュメントでの接続文字列のサンプルは、以下のようになっております。

"server=127.0.0.1;uid=root;pwd=12345;database=test"

このように、MySQL接続文字列を指定するので、お使いの環境に合わせて変更します。
「localhost」の文字列でも問題なかったし、他のサイトの例をみてみると「Server」など頭が大文字、「UserId」など文字列が異なる指定の例が書かれていますが、そちらでも実行できたので、ある程度バリエーションが存在しているようです。

$ dotnet ef dbcontext scaffold "server=localhost;database=blazordb;uid=root;password=" MySql.EntityFrameworkCore -o sakila -f

実行し、

Build started...
Build succeeded.

と表示し、エラーがなければ、Scaffoldingされたモデルファイルなどが生成されます。

中身を確認すると、以下のようにEntityクラスファイルの生成や、

Book.cs

using System;
using System.Collections.Generic;

#nullable disable

namespace sakilaConsole.sakila
{
    public partial class Book
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public int Price { get; set; }
        public string Publisher { get; set; }
    }
}

データコンテキストファイルの生成が成功されているのが確認できます。

blazordbContext.cs

using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;

#nullable disable

namespace sakilaConsole.sakila
{
    public partial class blazordbContext : DbContext
    {
        public blazordbContext()
        {
        }

        public blazordbContext(DbContextOptions<blazordbContext> options)
            : base(options)
        {
        }

        public virtual DbSet<Book> Books { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
                optionsBuilder.UseMySQL("server=localhost;database=blazordb;uid=root;password=");
            }
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Book>(entity =>
            {
                entity.ToTable("books");

                entity.Property(e => e.Id)
                    .HasColumnType("int unsigned")
                    .HasColumnName("id");

                entity.Property(e => e.Author)
                    .IsRequired()
                    .HasMaxLength(50)
                    .HasColumnName("author")
                    .HasDefaultValueSql("''");

                entity.Property(e => e.Price).HasColumnName("price");

                entity.Property(e => e.Publisher)
                    .HasMaxLength(50)
                    .HasColumnName("publisher");

                entity.Property(e => e.Title)
                    .IsRequired()
                    .HasMaxLength(50)
                    .HasColumnName("title")
                    .HasDefaultValueSql("''");
            });

            OnModelCreatingPartial(modelBuilder);
        }

        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    }
}

M1 Macでも上記のように、dotnet efツールによるMySQLのscaffoldが行えるのが確認できてよかったです。
Visual Studioのやり方もほぼ同様ですが、手順なども追って記載できればと思っております。

ではでは、またまた。

Comment

Related Article

【M1 Mac】dotnet ef ツールで、MySQLを scaffoldする。

2021.10.17

CATEGORY LIST

LATEST NEWS

単一ファイル毎に管理できる ファイルマネージャー CLI「coppeno」 v0.7.2リリース!

tool

2021.11.20

M1 Macで作る、ファミコンソフトプログラミング。 アセンブラでハローワールド編

Game

2021.11.08

う、動くぞ! M1 Mac(Big Sur)で PS2ソフトを遊ぶ。PCSX2 Mac版を起動

Game

2021.11.07

ゲオ 驚異の80%オフセール開催中! 中古ソフト大量購入!! まだ間に合う急げぇ〜!

Game

2021.10.24

【M1 Mac】dotnet ef ツールで、MySQLを scaffoldする。

C#

2021.10.17

『2Dスマホゲームにおける圧縮テクスチャ』『膨大になったDBを何とかする』9月30日(木)【オンライン開催イベント】

イベント

2021.09.24

バキバキ画面割れ、バッテリー膨張している iPhoneXを修理した話

iPhone

2021.09.05

Macのデータ復旧を簡単に! EaseUS Data Recovery Wizard for Mac Pro を使用してみた。

tool

2021.08.24

パーティション管理ソフト「MiniTool Partition Wizard」を使ってみた。

tool

2021.08.18

【2021】ゲオのサマーセール 980円以下のゲームソフトが半額!8月16日(月)まで。で購入したもの。

Game

2021.08.08

M1 Macで始める「ゼロからのOS自作入門」- 第1章

自作OS

2021.07.24

2021年6月 Amazonプライムデーで購入したもの。(今更)

イベント

2021.06.30

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US