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();
}
}






Users Today : 4
Users Yesterday : 18
Users Last 7 days : 189
Users Last 30 days : 821
Users This Month : 368
Users This Year : 2830
Total Users : 97345
Views Today : 5
Views Yesterday : 26
Views Last 7 days : 257
Views Last 30 days : 1053
Views This Month : 492
Views This Year : 3414
Total views : 135860
Who's Online : 0