ASP.NET Core 2 API 使用 Entity Framework Core

以下操作使用visual studio 2017

ASP.NET Core:2.0版

資料庫建立方式為Database first


建立ASP.NET Core 2 API 專案

步驟可以參考這篇文章


建立資料庫

資料庫名稱:Demo
資料表:Member、Items



建立資料夾,存放Entity Framework Core所產生的Class跟Context檔案

於專案上按右鍵 > 加入 > 新資料夾


輸入資料夾名稱Models,名稱可以自行命名

使用Entity Framework Core建立Entity Class跟Context檔案

過去使用Entity Framework的Database first會產生edmx檔案,
但Entity Framework Core沒有這種方便的功能了
比較類似Code First的方式,只能透過下指令的方式去更新物件

工具 > NuGet 封裝管理員 > 套件管理器主控台



在PM>後方輸入以下指令後,按Enter鍵

Scaffold-DbContext "Server=ADMIN;Database=Demo;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models




參數說明:

  • Scaffold-DbContext:資料庫連線字串
  • -OutputDir :要將產生的檔案存放在哪個資料夾
  • -Force:產生的檔案是否要覆寫現有的檔案,如果資料表有異動,這個指定一定要打

查看執行結果

  1. Models資料夾:存放由指令產生的DemoContext.cs、Items.cs與Member.cs
  2. DemoContext.cs含有兩個屬性Items與Members,後續就能以物件的方式操作資料庫資料
  3. OnConfiguring:宣告資料庫連線字串,這邊我們可以看到上一行有警告資訊,後面的補充資料會再另外說明

需要特別注意,如果有任何欄位修改,請去變動資料表的設定然後再重新下指令,指令的最後面記得加上 -Force

Scaffold-DbContext "Server=ADMIN;Database=Demo;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force


如果自己手動刪掉Models裡面的檔案,下指令時可能會出現 Build failed.訊息


設定相依注入

開啟Startup.cs > 在ConfigureServices內加入DI注入的設定

後續我們將在Controller中使用DemoContext,所以需要在這邊做DI的設定

services.AddDbContext<DemoContext>();



設定Controller

1.Controllers資料夾 > 開啟ValuesController.cs


2.新增建構子與注入DemoContext 


private readonly DemoContext _context;

public ValuesController(DemoContext context)

{
      _context = context;
}

3.編輯Get(int id)的方法

透過id參數找到對應的Member並回傳Email資料
var member = _context.Member.Find(id);
return member.Email;



查看執行結果


補充:

DemoContext.cs的OnConfiguring中關於資料庫連線字串的警告訊息

官方建議資料庫連線字串為機密資訊且可以會隨著開發環境而更改,所以應該將連線字串放到組態設定檔中

修改方式


1.修改appsettings.json

宣告連線字串,如果有遇到\反斜線符號,記得改成\\雙反斜線,否則會有警告訊息

"ConnectionStrings": {
    "DemoDatabase": "Server=ADMIN;Database=Demo;Trusted_Connection=True;"
 },




2.修改Startup.cs

將連線字串的資訊傳入DemoContext



3.修改DemoContext.cs


增加建構子,讓組態設定可以注入

public DemoContext(DbContextOptions<DemoContext> options) : base(options)

{

}



如果忘記加會遇到以下錯誤
ArgumentException: AddDbContext was called with configuration, but the context type 'DemoContext' only declares a parameterless constructor. This means that the configuration passed to AddDbContext will never be used. If configuration is passed to AddDbContext, then 'DemoContext' should declare a constructor that accepts a DbContextOptions<DemoContext> and must pass it to the base constructor for DbContext.



刪除OnConfiguring方法



這個修改雖然聽起來很美好,但若你使用-Force指令去更新model,那上述的DemoContext.cs修改就要重新做一遍,因為DemoContext.cs會自動再重新產生,所以修改的code會全部消失...,

不過這個問題已經在ASP.NET Core 2.1解決囉,DemoContext.cs會自動產生建構子,就不用自己新增了

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

留言

這個網誌中的熱門文章

CPE 一顆星選集題目說明與解答 - Java 筆記與心得分享

Visual Studio 自動排版格式化程式碼

1. Vito's family (CPE10406, UVA10041) - CPE一顆星解答與說明