導入
MVCのチュートリアルで、DBの作成を行うところがあります。
このときいろいろなファイルを触ってて、いまいち何をやってるのか理解が難しかったので説明を残しておきます。
1.DBの作成(EntityFrameworkCore)
MVCのチュートリアル「Modelの追加」を触ってる前提で話を進めます。
このチュートリアルで私がよく分からなかったところの補足を残していきます。
DBの作り方を知りたいだけならチュートリアルだけで十分なので、そういう方はまずチュートリアルを見ることをお勧めします。
Movieクラス
チュートリアルで出てくるMovieクラスについて
Movieインスタンスは、DBのテーブルの一行のデータに該当する。
Movieクラスの作成は、テーブルのcolumn定義をしていると考えてよい。
DbContextクラス
DBに相当する。
フィールドに、DbSet<T>を持つ。
このDbSet<T>がテーブルに相当する。
DbContextのDI
DbContextをStartup.csでインスタンス化する。
//Startup.cs public void ConfigureServices(IServiceCollection services) { services.AddDbContext<DbContextを継承した自作クラス>(options => options.UseSqlServer(Configuration.GetConnectionString("接続文字列"))); }
そのときにDBへ接続するのに使う文字列を、引数optionsで渡す。
使用する文字列は、appsettings.jsonファイルに記述する。
"ConnectionStrings": { "接続文字列": "Server=localhostとか;Database=データベース名;などなど" }
EntityFrameworkCoreを使うと、DBを触っているという意識をほとんどせず、DB操作ができてすごいなと思いました。PHPでMySQLを触ったときはSQL文をそのまま書いてたので。
ただ気になるのがクエリの最適化とかですが、どうなってるんでしょうか
DBの更新
そして、NuGetでコマンドを打ってDBを更新する。
add-migration マイグレーション命名 update-database
2.EFCoreで別のDBを使ってみる(例、PostgreSQL)
ちなみにチュートリアルでは、DBとしてSQLServerが使われていますが、optionsを変えることで、簡単に別のDBを使うことができます。
例えば、PostgreSQLを使ってみます。
まず、PostgreSQLを扱うためのパッケージをインストールします。
NuGetで以下のコマンドを実行。
install-package Npgsql.EntityFrameworkCore.PostgreSQL
次に、Injectionするインスタンスを、SQLServerからPostgreSQLに変更します。
//Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DbContextを継承した自作クラス>(options =>
options.UseNpgsql(Configuration.GetConnectionString("接続文字列")));
}
あとは、接続文字列をSQLServerに接続するものから、PostgreSQLに接続するものに変更します。
appsettings.jsonファイルを変更。
"ConnectionStrings": { "接続文字列": "Host=ほすと名;Port=でふぉは5432;User Id=ゆーざ;Password=ぱすわーど;Database=でーびー名" }
あとは、DBを生成する。
NuGetからコマンド実行
add-migration マイグレーション命名 update-database
これだけで使うDBをSQL Serverから、Postgresに変更できます。
EFCore、すごいですね。
コメント