前回の続きです。
データベースの素を作る
データベースを用意するのは面倒ですよね。環境を用意したこと無い方には想像もつかない作業だと思います。
「こういうデータをとりあえず突っ込みたいんだけど」というレベルの時には非常に面倒だと思います。
でも、Entity Framework Core を使えば、データベースの素となるクラス(Model)を用意すれば、少ない実装量でデータベースとテーブルの用意ができてしまいます。
早速作ってみましょう。
「組織情報テーブルの素」の作成
ソリューション エクスプローラーで Models フォルダを右クリックして、「追加」「クラス」を選びましょう。
「新しい項目の追加」のダイアログが表示され「クラス」が選ばれている状態だと思うので、組織を表すクラスファイル Organization.cs
を作ります。
ファイルを作成したら、クラス定義を下記のように修正しましょう。
/// <summary>
/// 組織
/// </summary>
public class Organization
{
/// <summary>
/// 組織ID
/// </summary>
public int Id { get; set; }
/// <summary>
/// 組織名
/// </summary>
public string Name { get; set; }
}
プロパティを2つ追加しました。これで組織情報テーブルに対応する情報が作れています。
クラス名がテーブル名に、プロパティ名がテーブル列名になります。
簡単ですね。
ちなみに Id
という名前の int 型プロパティは自動的にテーブルのキーとして認識されます。
「ユーザ情報テーブルの素」の作成
同じく Models フォルダを右クリックして、 UserInfo.cs
を作成しましょう。
内容は下記の通りです。
/// <summary>
/// ユーザ情報
/// </summary>
public class UserInfo
{
/// <summary>
/// ユーザID
/// </summary>
public int Id { get; set; }
/// <summary>
/// ユーザ名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 組織ID
/// </summary>
public int OrganizationId { get; set; }
/// <summary>
/// 組織
/// </summary>
public Organization Organization { get; set; }
}
こちらは 以前の記事 で紹介した通りなので説明不要ですね。
組織情報との関連を持っています。
データベースコンテキストの作成
ただクラスを2つ作っただけなので、これだけではDBやテーブルは作られません。
データベースコンテキストというものを作成して使用することで、データベースの作成とテーブルの作成を実施してくれます。
ソリューション エクスプローラーでプロジェクト直下(Modelsと同じ階層)に Data
フォルダを作成して、その中に MyDbContext.cs
という名前のクラスファイルを作りましょう。
/// <summary>
/// DBコンテキスト
/// </summary>
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { }
/// <summary>
/// ユーザ情報
/// </summary>
public DbSet<UserInfo> UserInfoes { get; set; }
/// <summary>
/// 組織情報
/// </summary>
public DbSet<Organization> Organizations { get; set; }
}
using は下記2行が必要になります。
using DBAccessSample.Models;
using Microsoft.EntityFrameworkCore;
このデータベースコンテキストのクラスにより、コード内のどのクラスがデータベースのテーブルを表現しているかを定義しているイメージです。
依存性注入とデータベース作成先(接続文字列)の設定
データベースコンテキストを定義しただけでは使われないので、依存性注入して実際に使える状態にしましょう。
プロジェクト直下の Startup.cs
を開いて、 ConfigureServices
メソッドを修正します。
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
services.AddDbContext
の行を追加しました。
下記 using の追加が必要です。
using DBAccessSample.Data;
using Microsoft.EntityFrameworkCore;
これでアプリ起動時にデータベースコンテキストが参照できるようになります。
ただ、UseSqlServer
メソッドで参照している Configuration.GetConnectionString("DefaultConnection")
はまだ書けていません。
プロジェクト直下にある appsettings.json
を修正しましょう。
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
ConnectionStringsの設定値を追加しました。ここで LocalDB というものを指定しています。軽量の DB エンジンで、アプリ開発のため一時的に使う目的で使われるものです。Visual Studio をインストールしていれば使えると思います。
データベース作成処理の実装
データベース コンテキストを使う準備ができたので、データベース作成処理を実装しましょう。ソリューション エクスプローラーから、先ほど作成した Data
フォルダに DbInitializer.cs
を追加します。
public class DbInitializer
{
public static void Initialize(MyDbContext context)
{
context.Database.EnsureCreated();
}
}
上記で「データベースが無ければ作成する」という振る舞いになります。
こちらをプログラム起動時に呼び出すようにしたいので、プロジェクト直下の Program.cs
の Main
メソッドを修正します。
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<MyDbContext>();
DbInitializer.Initialize(context);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred while seeding the database.");
}
}
host.Run();
}
下記 using の追加が必要です。
using DBAccessSample.Data;
using Microsoft.Extensions.DependencyInjection;
これで準備ができました!
プログラム実行
さあ、画面上部の実行ボタンでプログラムを実行してみましょう!
アプリケーションの見た目は何も変わりませんが、データベースが作成されたはずです。
Visual Studio のメニューから、「表示」→「SQL Server オブジェクト エクスプローラー」を開いて、LocalDB の状態を確認してみてください。
無事、データベースが作成されましたね!
次回は、このデータベースを操作する部分を説明していこうと思います。
============================
◆◇FIXERってどんな会社?◇◆
気になるあなたに、ぜひ参加していただきたい企業説明会を実施しています!
採用担当 が毎回、小さな疑問も大きな不安もじっくりお答えしています♪
聞きづらい質問もどんとこーい!な企業説明会です!
FIXER企業説明会はこちらからどうぞ!
◆◇FIXERでは今、新卒・中途問わず仲間を募集しています!◇◆
ぜひ求人も覗いてみてください!↓↓↓
FIXERの求人はこちらからどうぞ
============================