Entity Framework在.NET Core中被命名爲Entity Framework Core。雖然通常會用於對SQL Server數據庫進行數據操做,但其實它還支持其它數據庫,這裏就以PostgreSQL做爲例子。html
PostgreSQL能夠選用原生系統與Docker兩種安裝方式。git
在應用程序工程中添加相關的引用。
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
github
編寫兩個實體類,用於映射User表與Order表。sql
public class User { [Key] public int Id { get; set; } [Required] public string Name { get; set; } public virtual ICollection<Order> Orders { get; set; } public override string ToString() { var orders = new StringBuilder(); foreach (var o in Orders) { orders.Append(o.ToString()); } return $"UserId: {Id} Name: {Name} Orders: {orders.ToString()}"; } }
public class Order { [Key] public int Id { get; set; } [Required] public int UserId { get; set; } [Required] public string Item { get; set; } [Required] public string Description { get; set; } public virtual User User { get; set; } public override string ToString() { return $"OrderId: {Id} Item: {Item} Descriptoin: {Description}"; } }
構建必要的DbContext類,並傳入鏈接PostgreSQL所需的參數。docker
public class PurchaseDbContext : DbContext { public DbSet<User> Users { get; set; } public DbSet<Order> Orders { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder builder) { builder.UseNpgsql("Host=localhost;Username=postgres;Password=random;Database=Purchase"); } }
構建一個用於初始化數據庫的輔助類。數據庫
public class PurchaseDbContxtSeeder { public static void Seed(PurchaseDbContext context) { context.Database.EnsureDeleted(); context.Database.EnsureCreated(); var users = new List<User> { new User { Name = "Tom" }, new User { Name = "Mary" } }; var orders = new List<Order> { new Order { User = users[0], Item = "cloth", Description = "handsome"}, new Order {User = users[1], Item = "hat", Description = "red"}, new Order {User = users[1], Item = "boot", Description = "black"} }; context.Users.AddRange(users); context.Orders.AddRange(orders); context.SaveChanges(); } }
測試的程序第一步是調用生成數據的輔助類,第二步是查詢數據表中的數據並在控制檯中顯示出來。app
static void Main(string[] args) { using (var context = new PurchaseDbContext()) { PurchaseDbContxtSeeder.Seed(context); var users = context.Users.Include(u => u.Orders).ToList(); users.ForEach(u => { System.Console.WriteLine(u); }); } }
如下是顯示的結果:
dom
程序正常運行的話,數據庫中應該能夠看到所生成的數據表:
ide
再查看數據表的生成腳本,能夠看到字段以及表之間的關係皆經過Entity Framework自動生成。
post
在以前寫過的兩篇文章裏列舉了經過ADO.NET操做SQL Server數據庫與Dapper操做MySQL數據庫的方法。
.NET Core開發日誌——ADO.NET與SQL Server
.NET Core開發日誌——Dapper與MySQL
再加上這篇的經過Entity Framework操做PostgreSQL數據庫,.NET Core裏對於這類需求至少有三種解決方案。
並且每種方式均可以支持不一樣的數據庫。
ADO.NET data provider
Dapper has no DB specific implementation details, it works across all .NET ADO providers including SQLite, SQL CE, Firebird, Oracle, MySQL, PostgreSQL and SQL Server.
Entity Framework Database Providers
這三種方式均可運用於生產環境,且已被無數正式項目驗證過,至於選用何種方式,主要取決於開發者的習慣與喜愛。.NET Core生態圈仍是至關自由的。