iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
Modern Web

ASP.NET Core 入門實戰30天系列 第 22

Day 22 使用ASP .NET Core 手把手打造一個購物網站 - 新增seed data

  • 分享至 

  • xImage
  •  

前言

今天延續昨天build出來的專案
新增seed data


dtep by step

  1. Initial migration
    昨天已經藉由dotnet cli建立controller 和相關的view頁面
    在這裡先透過migration先建立一份記錄起來,之後要使用直接執行database update即可
dotnet ef migrations add InitialCreate
dotnet ef database update

  1. create seed data class
    在開發期會需要用到一些測試data
    ASP .NET Core 也提供相關的產生測試資料的方法
    首先建立一個seed的folder
    並新增一個叫做SeedProductData的.cs

  1. 將seed dada加入到專案初始化流程
    在這裡要調整一下Main.cs的程式
    預設範本應該是執行buld之後就開始run了
    在這裡要加上seed data的部分
    如果db裡面沒有資料時,會自動執行seed data,將資料寫入DB裡面

Main.cs

CreateHostBuilder(args).Build().Run();
//一開始先執行build然後run

 var host = CreateHostBuilder(args).Build();
 
 //在執行run之前先初始化seed資料
using (var scope = host.Services.CreateScope())
   {
     var services = scope.ServiceProvider;
     try
     {
        SeedProductData.Initialize(services);
     }
     catch (Exception ex)
     {
     var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An error occurred seeding the DB.");
     }
  }
  host.Run();
  1. 調整DBContext

因為我們已經將連接字串設定注入到startup.cs裡面了
如果再DbContext override OnConfiguring需要另外加入判斷
db的連線字串不存在時才再去設定檔讀一次

ShopMvcDbContext.cs

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
   if (!optionsBuilder.IsConfigured)
    {
        optionsBuilder.UseSqlite(Configuration["ConnectionStrings:ShopMvcContext"]);
    }
}
  1. 啟動專案,確認初始資料
    執行專案可以看到剛剛建立的seed 資料已經成功被建立起來了

參考資料
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/working-with-sql?view=aspnetcore-3.1&tabs=visual-studio-code

https://medium.com/hackernoon/asp-net-core-how-to-use-dependency-injection-in-entity-framework-core-4388fc5c148b


上一篇
Day 21 使用ASP .NET Core 手把手打造一個購物網站 - 起手式
下一篇
Day 23 使用ASP .NET Core 手把手打造一個購物網站 - 新增Repository
系列文
ASP.NET Core 入門實戰30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言