1. 程式人生 > 實用技巧 >EntityFramework Core入門教程-12-在ASP.NET Core專案中配置EF Core

EntityFramework Core入門教程-12-在ASP.NET Core專案中配置EF Core

參考資料:
微軟MVP楊旭教程:https://www.bilibili.com/video/BV1xa4y1v7rR?p=11

準備工作

新增一個Web API專案並設為啟動專案,並新增對Demo.Data和Demo.Domain的引用。

為該專案安裝Microsoft.EntityFrameworkCore.SqlServer庫。

刪掉原DbContext中override的OnConfiguring()方法。我看的其他教程中常常都只在OnConfiguring()中配置,而不講真正的配置方法,讓新手非常困惑。楊旭大佬的教程果然最貼合實際。

在DbContext中建立建構函式,有一個DbContextOptions<DemoDbContext>類的引數options,順便用base()呼叫父類的建構函式,並把Options傳進去,就可以了:

public DemoDbContext(DbContextOptions<DemoDbContext> options): base(options)
{
}

Web專案中的配置

回到Web專案中,開啟appsettings.json,新增一個配置集合:

"ConnectionStrings": {
    "LocalDB": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=YangDemo;Integrated Security=True"
  }

因為我們可能有開發環境資料庫,Staging環境資料庫,UAT環境資料庫,正式環境資料庫等,所以"ConnectionStrings"是一個集合,先給當前用的資料庫取名"LocalDB"。

開啟Startup.cs,在ConfigureServices方法(相當於是個容器)進行配置,配置使用EF Core和SqlServer Provider。

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddDbContext<DemoDbContext>(options =>
    {
        options.UseSqlServer(Configuration.GetConnectionString("LocalDB"));
    });
}

其中還用到了取配置檔案的一種方法,Configuration.GetConnectionString("LocalDB")中Configuration可能是配置檔案對應的物件,GetConnectionString取配置檔案中名為"ConnectionStrings"的配置項,然後在引數中指定ConnectionStrings中名為"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專案,可能還要重新遷移。