博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET Core开发日志——Entity Framework与PostgreSQL
阅读量:5090 次
发布时间:2019-06-13

本文共 3043 字,大约阅读时间需要 10 分钟。

原文:

Entity Framework在.NET Core中被命名为Entity Framework Core。虽然一般会用于对SQL Server数据库进行数据操作,但其实它还支持其它数据库,这里就以PostgreSQL作为例子。

PostgreSQL

PostgreSQL可以选用原生系统与Docker两种安装方式。

Package

在应用程序工程中添加相关的引用。

dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL

Entity

编写两个实体类,用于映射User表与Order表。

public class User{    [Key]    public int Id { get; set; }    [Required]    public string Name { get; set; }    public virtual ICollection
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

构建必要的DbContext类,并传入连接PostgreSQL所需的参数。

public class PurchaseDbContext : DbContext{    public DbSet
Users { get; set; } public DbSet
Orders { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder builder) { builder.UseNpgsql("Host=localhost;Username=postgres;Password=random;Database=Purchase"); }}

Seeder

构建一个用于初始化数据库的辅助类。

public class PurchaseDbContxtSeeder{    public static void Seed(PurchaseDbContext context)    {        context.Database.EnsureDeleted();        context.Database.EnsureCreated();        var users = new List
{ new User { Name = "Tom" }, new User { Name = "Mary" } }; var orders = new List
{ 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(); }}

Test

测试的程序第一步是调用生成数据的辅助类,第二步是查询数据表中的数据并在控制台中显示出来。

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);        });    }}

以下是显示的结果:

991496-20181002194907132-920762269.png

程序正常运行的话,数据库中应该可以看到所生成的数据表:

991496-20181002193832602-294879325.png

991496-20181002195021901-1049911813.png

991496-20181002195058431-1548244282.png

再查看数据表的生成脚本,可以看到字段以及表之间的关系皆通过Entity Framework自动生成。

991496-20181002194003897-2078848601.png

991496-20181002193922736-1984599093.png

小结

在之前写过的两篇文章里列举了通过ADO.NET操作SQL Server数据库与Dapper操作MySQL数据库的方法。

再加上这篇的通过Entity Framework操作PostgreSQL数据库,.NET Core里对于这类需求至少有三种解决方案。
而且每种方式都可以支持不同的数据库。

这三种方式都可运用于生产环境,且已被无数正式项目验证过,至于选用何种方式,主要取决于开发者的习惯与喜好。.NET Core生态圈还是相当自由的。

posted on
2019-02-15 11:28 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/10382684.html

你可能感兴趣的文章