.NET Core开发日志——Entity Framework与PostgreSQL
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生态圈还是相当自由的。
.NET Core开发日志——Entity Framework与PostgreSQL的更多相关文章
- Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程
原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...
- 如何在ASP.NET Core中应用Entity Framework
注:本文提到的代码示例下载地址> How to using Entity Framework DB first in ASP.NET Core 如何在ASP.NET Core中应用Entity ...
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...
- .NET Core开发日志——RequestDelegate
本文主要是对.NET Core开发日志--Middleware的补遗,但是会从看起来平平无奇的RequestDelegate开始叙述,所以以其作为标题,也是合情合理. RequestDelegate是 ...
- .NET Core开发日志——从搭建开发环境开始
.NET Core自2016年推出1.0版本开始,到目前已是2.1版本,在其roadmap计划里明年更会推出3.0版本,发展不可不谓之迅捷.不少公司在经过一个谨慎的观望期后,也逐步开始将系统升级至最新 ...
- .NET Core开发日志——OData
简述 OData,即Open Data Protocol,是由微软在2007年推出的一款开放协议,旨在通过简单.标准的方式创建和使用查询式及交互式RESTful API. 类库 在.NET Core中 ...
- .NET Core开发日志——结构化日志
在.NET生态圈中,最早被广泛使用的日志库可能是派生自Java世界里的Apache log4net.而其后来者,莫过于NLog.Nlog与log4net相比,有一项较显著的优势,它支持结构化日志. 结 ...
- .NET Core开发日志——Edge.js
最近在项目中遇到这样的需求:要将旧有系统的一部分业务逻辑集成到新的自动化流程工具中.这套正在开发的自动化工具使用的是C#语言,而旧有系统的业务逻辑则是使用AngularJS在前端构建而成.所以最初的考 ...
随机推荐
- MYSQL 中query_cache_size小结
1 原理 MySQL查询缓存保存查询返回的完整结果.当查询命中该缓存,会立刻返回结果,跳过了解析,优化和执行阶段. 查询缓存会跟踪查询中涉及的每个表,如果这写表发生变化,那么和这个表相关的所有缓 ...
- opencv-android笔记1:android studio 2.3 + opencv-android-sdk 实现 camera预览
Android studio环境配置不再赘述,可以参照我的其他博客. Android应用程序开发环境搭建:http://blog.csdn.net/ja33son/article/details/61 ...
- SNF快速开发平台MVC-Grid++集成打印
一.显示效果: 二.程序实现: 1.先要在 打印模版程序 给指定页面进行在线设计打印模版 2.在使用的程序当中,增加如下代码即可.程序上是可以挂多个打印模版的,程序页面的代码不用动直接可以读取到打印模 ...
- numpy数组(4)-二维数组
python创建二维 list 的方法是在 list 里存放 list : l = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] numpy可以直接 ...
- Android adb input 命令介绍
input命令是用来向设备发送模拟操作的命令: 因为版本不同,input命令也有所不同 以下为Android 4.0的input命令: usage:input text <string> ...
- IIS发布的网站常见的问题汇总
1.安装.NET4.0时缺少WIC导致不能装上.NET4.0,下载安装后即可,下载地址如下,根据系统版本选择对应软件 32位版:https://www.microsoft.com/zh-cn/down ...
- 《转》推荐几个精致的web UI框架
1.Aliceui Aliceui是支付宝的样式解决方案,是一套精选的基于 spm 生态圈的样式模块集合,是 Arale 的子集,也是一套模块化的样式命名和组织规范,是写 CSS 的更好方式. git ...
- rman list命令
rman list命令 List command example 可以用于查看backup,copy,archivelog等 01 list incarnation================ ...
- 【iCore1S 双核心板_FPGA】例程十四:FSMC总线通信实验——独立地址模式
实验原理: STM32F103上自带FMC控制器,本实验将通过FMC总线的地址独立模式实现STM32与FPGA 之间通信,FPGA内部建立RAM块,FPGA桥接STM32和RAM块,本实验通过FSMC ...
- 跨控制器跳转view——RedirectToRoute和RedirectToAction
已知控制器AccountController.cs和HomeController.cs,如果从页面Account/Login直接跳转到Home/Index,可以利用RedirectToRoute和Re ...