asp.net coreのDIにDbContextを追加する

asp.net coreはDIが使えるが、DbContextをDIさせるのに少々手間取ったので備忘録としてメモ。

何に戸惑ったのかというと、DbContextインスタンスを作成するときに、appsettings.jsonから接続文字列を取り出して、それを接続に使う方法。

ドキュメントをちゃんと読んでいれば直ぐ分かるのだけどねぇ・・・

で、結局以下のような感じで接続文字列を取得して、インスタンス作成が可能。(UseSqlServerの部分は実際のDBMS用ドライバに合わせてねっ)

using Microsoft.EntityFrameworkCore;
using XXXContextNamespace;
・・・
var builder = WebApplication.CreateBuilder(args);
・・・
builder.Services.AddDbContext<XXXContext>(opt=>
    opt.UseSqlServer(builder.Configuration.GetConnectionString("XXXConnection")));

こうしておくと、例えばwebappならば、PageModelのコンストラクタから、このDbContextのインスタンスを取得することができる。

using XXXContextNamespace;
・・・
private readonly ILogger<IndexModel> _logger;
private readonly XXXContext _ctx;
public class IndexModel : PageModel {
	public IndexModel(ILogger<IndexModel> logger, XXXContext ctx) {
		_logger = logger;
		_ctx = ctx;
		・・・
	}
}

Blazor Serverなら、こんな感じ

@page "/"
@using XXXContextNamespace
@inject XXXContext XXXCtx
・・・
XXX:<select>
@if (XXXMasters != null) {
	foreach(var itm in XXXMasters) {
		<option value="@itm.Key">@itm.Name</option>
	}
</select>
・・・
@code {
	protected List<XXXMaster> XXXMasters = null!;
	・・・
	protected async Task OnInitializeAsync() {
		var q = XXXCtx.XXXMaster・・・;
		XXXMasters = await q.ToListAsync();
	}
}

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。 好きなことだけ拾って投稿しているので、内容にはあまり期待しないでねw
カテゴリー: .NET, asp.net core, Entity Framework, Web, 技術系 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください