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<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

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

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

Seeder

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

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

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

以下是显示的结果:

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

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

小结

在之前写过的两篇文章里列举了通过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生态圈还是相当自由的。

最新文章

  1. [Django]用户权限学习系列之User权限基本操作指令
  2. python des ecb 加密 demo
  3. Spring相关
  4. c#初学-多线程中lock用法的经典实例
  5. 第二次正式java web开发项目的总结(回收站恢复)
  6. R之批处理
  7. CSS3----background:-webkit-gradient()渐变效果
  8. MySQL连接无法解析HOST主机名
  9. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第六集之基本命令使用】
  10. spring 普通类注入为null,通过自定义SpringUtils解决
  11. thymeleaf拆分头部(head)显示异常问题
  12. Vue生命周期(转)
  13. mpeg压缩输入格式---打包模式和平面模式
  14. 在python命令行执行sudo命令
  15. 使用jsonp获取天气情况
  16. java中copy 一个list集合的方法
  17. Python全栈day26-27(面向对象进阶)
  18. yii2:frontend/frontactoin curl生成
  19. windows定时计划备份MySql
  20. iOS 字符串处理笔记

热门文章

  1. SpringCloud分布式事务TCC实现
  2. Java Arrays.sort源代码解析
  3. WinDbg下载符号文件
  4. 【LeetCode】238. Product of Array Except Self
  5. ORACLE物化视图(物理视图)
  6. Android websock 应用
  7. 第三部分:Android 应用程序接口指南---第二节:UI---第五章 设置(Settings)
  8. 3. Tensorflow生成TFRecord
  9. Android 浮动窗口进阶——画中画,浮动视频(附Demo)
  10. bootstrap 3.0 LESS源代码浅析(二)