2018年4月15日 星期日

在 ASP.NET Core Web API 內,使用 SQLite 資料庫開發教學

在這篇文章中,我們將要來實際建立一個 ASP.NET Core 的 Web API 專案,並且在這個專案內,我們將會要使用 SQLite 資料庫 database之教學練習。在這個練習中,我使用的 Visual Studio 2017 為 15.6 的版本。

本篇文章的專案範例原始碼,可以從 https://github.com/vulcanlee/CSharpNotes2018/tree/master/XamarinCore 取得

建立一個 ASP.NET Core Web API 專案

  • 打開任何一種版本的 Visual Studio 2017
  • 從功能表中點選 [檔案] > [新增] > [專案]
  • 從 [新增專案] 對話窗中,點選 [已安裝] > [Visual C#] > [.NET Core] > [ASP.NET Core Web 應用程式]
  • Visual Studio 2017 新增專案
  • 在該對話窗下方的 [名稱] 欄位,輸入這個專案的名稱,最後點選 [確定] 按鈕
  • 此時,您將會看到 [新增 ASP.NET Core Web 應用程式對話窗],請確認 [.NET Core] 選擇的版本是現在最新的 [ASP.NET Core 2.0]
  • 專案類型,請選擇 [API]
  • 在最左方的 [用於建立 ASP.NET Core 應用程式的專案範本,附有 RESTful HTTP 服務的控制器範例,此範本也可用於 ASP.NET Core MVC 的檢視及控制器] 文字下方,請確認選擇 [變更驗證] 的下方為 [無驗證]
  • 完成之後,請點選 [確定] 按鈕
    新增 ASP.NET Core Web 應用程式對話窗
  • 稍微等候一段時間,這個ASP.NET Core Web 應用程式專案就會建立完成,您可以從 Visual Studo 2017 的方案總管中,看到建立好的專案內容,如下圖所示:
    ASP.NET Core Web 應用程式 專案內容

安裝 NuGet 套件

  • 使用滑鼠右擊 [相依性] 節點,選擇 [管理 NuGet 套件]
  • 在 [管理 NuGet 套件] 視窗中,點選 [瀏覽] 標籤頁次,接著在搜尋文字輸入盒中,輸入 [Microsoft.EntityFrameworkCore]
  • 當搜尋到 [Microsoft.EntityFrameworkCore] 之後,請安裝這個套件
    管理 NuGet 套件
  • 在 [管理 NuGet 套件] 視窗中,點選 [瀏覽] 標籤頁次,接著在搜尋文字輸入盒中,輸入 [Microsoft.EntityFrameworkCore.SQlite]
  • 當搜尋到 [Microsoft.EntityFrameworkCore.SQlite] 之後,請安裝這個套件
    管理 NuGet 套件

建立 Context 類別

  • 滑鼠右擊專案節點,選擇 [加入] > [新增資料夾],接著輸入 [Models]
  • 滑鼠右擊 [Models] 資料夾,選擇 [加入] > [類別]
  • 在 [新增項目] 對話窗中名稱欄位,輸入 [DatabaseContext]
    新增項目對話窗
  • 使用底下程式碼替換剛剛建立好的檔案內容,在這裡,我們剛剛建立的 DatabaseContext 類別,將會繼承 DbContext 類別,並且我們需要覆寫 OnConfiguring 方法,並且在這個方法類,指定使用 SQLite 資料庫的名稱,也就是使用這行敘述 optionsBuilder.UseSqlite("Filename=MyDatabase.db")
C Sharp / C#
using Microsoft.EntityFrameworkCore;

namespace XamarinCore.Models
{
    public class DatabaseContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite("Filename=MyDatabase.db");
        }
    }
}

修正 Startup 類別

  • 請在 Visual Studio 2017 方案總管中,打開 [Startup.cs] 檔案
  • 找到 [ConfigureServices] 方法,依照底下程式碼進行修正
C Sharp / C#
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddEntityFrameworkSqlite().AddDbContext<DatabaseContext>();
}
  • 接下來,我們需要建立 Startup 的建構式,依照底下程式碼進行修正。在這裡,我們將會使用建構式注入 (Constructor Dependency Injection) 方法,注入 IHostingEnvironment 這個介面實作物件,並且在這裡設定要產生 SQLite 的資料庫檔案。
C Sharp / C#
public Startup(IHostingEnvironment env)
{
    using(var client = new DatabaseContext())
    {
        client.Database.EnsureCreated();
    }
}

建立資料模型與修正 DatabaseContext 類別

  • 滑鼠右擊 [Models] 資料夾,選擇 [加入] > [類別]
  • 在 [新增項目] 對話窗中名稱欄位,輸入 [Todo]
    新增項目對話窗
  • 使用底下程式碼來宣告 Todo 這個類別
C Sharp / C#
public class Todo
{
    public int Id { get; set; }

    public string Title { get; set; }
    public bool HasCompleted { get; set; }
}
  • 打開 [DatabaseContext.cs] 檔案,在 DatabaseContext 類別中,參考底下程式碼,加入 Todos 這個屬性的宣告
C Sharp / C#
using Microsoft.EntityFrameworkCore;

namespace XamarinCore.Models
{
    public class DatabaseContext : DbContext
    {
        public virtual DbSet<Todo> Todos { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite("Filename=MyDatabase.db");
        }
    }
}

使用移轉來建立資料庫

  • 滑鼠右擊專案節點,選擇 [編輯 XamarinCore.csproj]
  • 找到 <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />宣告,在這行後面,加入 <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />,完成後的結果如下所示,最後,請按下儲存功能。
XML
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.5" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.0.1" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
  </ItemGroup>

</Project>
  • 請 [建置] 這個專案
  • 滑鼠右擊專案節點,選擇 [在檔案總管中開啟資料夾]
    新增項目對話窗
  • 當檔案總管開啟之後,請在位置列中輸入 [cmd],通知作業系統開啟命令提示字元視窗
  • 請在命令提示字元視窗中,輸入 dotnet ef migrations add InitialCreate,並且按下 [Enter]。當您看到這段文字 Done. To undo this action, use 'ef migrations remove' 出現,那就表示這段命令已經成功執行。
Console
D:\Vulcan\Projects\XamarinCore\XamarinCore>dotnet ef migrations add InitialCreate
Done. To undo this action, use 'ef migrations remove'
  • 請在命令提示字元視窗中,輸入 dotnet ef database update,並且按下 [Enter]。當您看到這段文字 Applying migration '20180308090145_InitialCreate'. Done. 出現,那就表示這段命令已經成功執行。
  • 底下畫面截圖,就是剛剛在命令提示字元視窗中,所下達的兩個命令。
    使用移轉來建立資料庫
  • 現在,我們可以查看 Visual Studio 2017 的方案總管,您將會看到在這個專案節點內,多了一個 [Migrations] 資料夾,並且在該資料夾內也有兩個檔案存在;另外,我們也看到了 [MyDatabase.db] 這個 SQLite Database 資料庫檔案也產生出來了。
    SQLite資料庫已經建立完成

結論

好的,現在我們可以透過 Entity Framework Core 所提供的各項功能與機制,開始進行 SQLite 資料庫的資料表存取動作了。

其他相關文章

更多關於 Xamarin / Xamarin.Forms 教學、技術分享、用法文章,請參考 I ♥ Xamarin

沒有留言:

張貼留言