2021年1月26日 星期二

自行定義的Model模型處裡

如果有自行定義的Model,需要加入Context中使用時 首先建立Model 例如: public class LoginRtnval { public int rtnval { get; set; } public string grade { get; set; } public string ptype { get; set; } } 然後在 testContext中的資料表宣告中加入 public DbSet LoginRtnvals { get; set; } 在OnModelCreating中加入 protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasNoKey(); . . . . . }

Entity Framework Core DataBase First

因為EF CORE不支援資料庫視覺化設計及透過精靈產生entity與context classes,必須使用NuGet Package Manger的Package Manger Console 以命令的方式來產生Model 主要使用命令為Scaffold-DbContext 需注意NuGet是否安裝以下元件 Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.SqlServe 範例: Scaffold-DbContext [-Connection] [-Provider] [-OutputDir] [-Context] [-Schemas>] [-Tables>] [-DataAnnotations] [-Force] [-Project] [-StartupProject] [] Scaffold-DbContext "Server=.\SQLExpress;Database=SchoolDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models Scaffold-DbContext "Data Source=192.168.1.100;Initial Catalog=testdb;Persist Security Info=True;TrustServerCertificate=true;User ID=username;Password=userpwd" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models\Test //若資料庫有更新(全部),則後面可以加上 「-Force」 Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force //只更新某一個資料表,如 Blog,可以加上-Tables Blog Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables Blog -Force 在DBContext建立完成之後,可將連線字串移往appsettings.json裡。 首先將TestContext裡的if (!optionsBuilder.IsConfigured)內容清除或直接刪除 在appsettings.json中加入 "ConnectionStrings": { "TestConnection": "Server=****;Database=****;User ID=*****;Password=****;Trusted_Connection=True;Integrated Security=False;" } 於 Startup.cs註冊DbContext,引用 using WebApplicationRazorPages.Models.Test; using Microsoft.EntityFrameworkCore; public void ConfigureServices(IServiceCollection services) { ... services.AddDbContextTestContext>(options => options.UseSqlServer(Configuration.GetConnectionString("TestConnection"))); } PS:需注意在執行該命令時,專案不可以有錯誤,否則會有Build Failed發生