與過去Entity Framework 6相比,
Entity Framework Core(簡稱EF Core)在使用上做了相當的改變,
本文將介紹EF Core的使用方式。
同步發表於個人點部落 - [鐵人賽Day22] ASP.Net Core MVC 進化之路 - Entity Framework Core / Code first
如果有接觸過EF6的讀者對ORM這個名詞應該都不陌生。
那ORM是什麼呢?
ORM全名為Object Relationship Mapping(物件關聯對應),
主要可以幫助我們用「寫程式」的方式去描述資料庫的結構,
並幫我們實現資料庫的新刪修查的功能,
你可以將它想像成一個幫你跟資料庫溝通的代理人。
好處是它可以幫我們將資料自動轉為強型別的物件。
而在**.Net中實現ORM的工具有許多種,
Entity Framework系列是微軟官方推出的ORM工具,
它可以使用LINQ**的描述方式幫助我們操作資料。
但假如貴公司還是習慣使用純粹的SQL語法操作,
可以考慮使用Dapper這套工具。
EF Core是**.Net中幫助我們與DB溝通的ORM工具,
跟前一代的EF6相比最大的差別是輕量化與跨平台。
在過去EF6的時候edmx**速度相對較慢,
但也真的非常強大XD。
EF Core將過去的Model First拿掉了,
目前的建制方式剩下以下兩種:
以下將示範使用Code First
的建立方式。
首先先建立好一個ASP.Net Core MVC的範本專案,
接著使用Nuget安裝Microsoft.EntityFrameworkCore
。
下面這兩張表描述著Person(人)與Education(學歷)的一對多關係,
我們使用Code First來建立。
DbContext
是EF Core中幫我們與資料庫溝通的類別,
所以我們先建立一個CustomDbContext
並繼承DbContext
,
並使用DbSet<TEntity>
來裝載描述資料表的類別。
public class CustomDbContext : DbContext
{
public CustomDbContext(DbContextOptions<CustomDbContext> options) : base(options)
{
}
public DbSet<Person> Person { get; set; }
public DbSet<Education> Education { get; set; }
}
接著先來建立Person及Education類別。Person.cs
public class Person
{
[Required]
public int Id { get; set; }
[Required]
[StringLength(20)]
public string Name { get; set; }
public int? Age { get; set; }
}
在資料欄位中凡命名包含ID者將會自動被視為主鍵,
你也可以透過[Key]
自行設定。
[Required]
可設定必要的欄位(不允許Null),
但結構型別(int, double, float, datetime)不得為空值(只會是預設值),
所以使用int?
方式設定。[StringLength()]
則代表字串長度。
好了之後在專案中建立一個dbsetting.json
,
裡面會放置連接資料庫需用到的``ConnectionStrings。
{
"ConnectionStrings": {
"SampleDBConnection": "Server=(LocalDB)\\MSSQLLocalDB;Database=SampleDB;"
}
}
接著修改Program
中的組態設定。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((webHostBuilder, configurationBinder) =>
{
configurationBinder.AddJsonFile("dbsetting.json", optional: true);
})
.UseStartup<Startup>();
接著在Startup中ConfigureServices方法加入連接字串設定。
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<CustomDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("SampleDBConnection"));
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
最後在下面Configure
方法中設定每次執行前檢查資料庫是否被建立。
public void Configure(IApplicationBuilder app, CustomDbContext customDbContext)
{
customDbContext.Database.EnsureCreated();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
你也可以透過Add-Migration
指令的方式進行建立,
有興趣的讀者可參考這篇。
最後請將程式執行起來後,
使用資料庫連接工具(如SSMS)進行連接,
查看我們剛才建立的資料表。
Person
Education
Code First的內容就先介紹到這邊,
下篇會接著介紹EF Core中Code First From Database的使用方式,
若內容有誤再麻煩指正。
https://docs.microsoft.com/zh-tw/ef/core/