ASP.NET CoreプロジェクトにおけるEF Coreの構成
2464 ワード
参考資料:マイクロソフトMVP楊旭教程:https://www.bilibili.com/video/BV1xa4y1v7rR?p=11 準備 Webプロジェクトにおける構成 構成が成功したかどうかをテストする
準備作業
Web APIプロジェクトを追加し、起動プロジェクトとして設定し、Demoを追加する.DataとDemo.Domainの参照.このプロジェクトにMicrosoftをインストールします.EntityFrameworkCore.SqlServerライブラリ.元のDbContextのoverrideのOnConfiguring()メソッドを削除します.私が見た他のチュートリアルでは、OnConfiguring()でしか構成されていないことが多く、本当の構成方法を話さず、初心者を困惑させています.楊旭さんの教程はやはり現実に合っている.DbContextでコンストラクション関数を確立するには、DbContextOptions
クラスのパラメータoptionsがあり、ついでにbase()
で親クラスのコンストラクション関数を呼び出し、Optionsを転送すればよい:public DemoDbContext(DbContextOptions options): base(options)
{
}
Webプロジェクトでの構成
Webプロジェクトに戻り、appsettingsを開く.json、1つの構成セットを追加します:"ConnectionStrings": {
"LocalDB": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=YangDemo;Integrated Security=True"
}
開発環境データベース、Staging環境データベース、UAT環境データベース、正式環境データベースなどがある可能性がありますので、「ConnectionStrings」は1つのセットで、まず現在使用されているデータベースに「LocalDB」と名付けます.スタートを切るcsは、コンフィギュレーションサービスメソッド(コンテナに相当)で構成され、EF CoreとSqlServer Providerを使用するように構成されています.public void ConfigureServices(IServiceCollection services)
{
...
services.AddDbContext(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("LocalDB"));
});
}
では、コンフィギュレーションファイルを取得する方法も使用されています.Configuration.GetConnectionString("LocalDB")
でコンフィギュレーションがコンフィギュレーションファイルに対応するオブジェクトである可能性があります.GetConnectionsStringでは、コンフィギュレーションファイルの「ConnectionsStrings」というコンフィギュレーションアイテムを取得し、パラメータでConnectionsStringsの「LocalDB」というアイテムを指定します.上記のいくつかの項目は、UseSqlServer()
のパラメータとして接続文字列を作成します.構成が整うと、DemoDbContextは注入に依存して使用できるようになります.構成が成功したかどうかをテスト
Web APIプロジェクトに付属のWeatherForecastControllerコントローラに行き、コンストラクション関数でDemoDbContextの注入に依存し、読み取り専用フィールドを生成して使用します....
private readonly DemoDbContext _dbContext;
public WeatherForecastController(..., DemoDbContext dbContext)
{
...
_dbContext = dbContext;
}
次のHttpGetメソッドを変更します.[HttpGet]
public IActionResult Get()
{
var clubs = _dbContext.Clubs.ToList();
// var result = JsonSerializer.Serialize(clubs);
return Ok(clubs);
}
プロジェクトを実行すると、検出された内容がJSON形式で表示されます.Contextが存在するプロジェクトを個別に分けたおかげで、コンソールからWebプロジェクトに変更し、再移行する可能性があります.