ASP.NET Core MVCでブログを作る - データベースを用意

 アプリのデータベースを用意する。今回はMongoDBを使う。

 開発環境のデータベースを用意する。Dockerで一発。
docker run -d --name mymongo -p 27017:27017 mongo

データベースをDockerコンテナで用意した。アプリもDockerコンテナに入っている。アプリコンテナからデータベースコンテナへ接続する手段はいくらかある。ここではDockerで与えられるネットワークのIPでつなぐ。
 ホストマシンでipconfigコマンドを走らせ、DockerNATのネットワークで与えられているIPを調べる。ぼくの環境ではIPが”10.75.0.1”だった。これはデフォルトでDockerに与えられるものから変えていないものなので、たいていはこれと同一だろう。
 というわけでアプリコンテナで使うMongoDBコンテナへの接続文字列は→"mongodb://10.0.75.1"

 アプリにMongoDBと接続を行うためのライブラリを入れる。VisualStudio下部の真ん中にあるパッケージマネージャコンソールで、下記三行を実行。
Install-Package MongoDB.Driver

Install-Package MongoDB.Driver.Core
Install-Package MongoDB.Bson

この実行結果は.csprojに保存されるので、プロジェクトの環境を移動したときの復元はそれほど手間ではない。

 アプリ。まず接続を行うクラスを用意する。Scriptsというディレクトリをアプリのプロジェクト内に用意し、DbConnection.csを入れる。内容は下記。
DbConnection.cs

using MongoDB.Driver;
using System;
using System.Net.Sockets;

public class DbConnection
{
public static IMongoDatabase Db { get; set; }

public static void Connect(string connectionString, string dbName)
{
var url = new MongoUrl(connectionString);
var clientSettings = MongoClientSettings.FromUrl(url);
Action<Socket> socketConfigurator = s => s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
clientSettings.ClusterConfigurator = cb => cb.ConfigureTcp(tcp => tcp.With(socketConfigurator: socketConfigurator));
var client = new MongoClient(clientSettings);
Db = client.GetDatabase(dbName);
}
}


 接続を行う。Startup.csのメソッドStartupがアプリ立ち上がりの処理を行っているので、今回はここにつっこむことにする。
Startup.cs

public Startup(IConfiguration configuration)
{
Configuration = configuration;

var dbName = "blog";
DbConnection.Connect(configuration.GetValue<string>("MONGO_CONNECTION"), dbName);
}


 接続文字列をappsettings.jsonに追記。
{

"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"MONGO_CONNECTION": "mongodb://10.0.75.1"
}


これで、アプリでデータベースが使えるようになった。
今回のコミット
comment: 0