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プロジェクトに変更し、再移行する可能性があります.