.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在前端构建而成.所以最初的考 ...
随机推荐
- ASP.NET MVC ViewBag/ViewData/TempData区别
ViewBag/ViewData public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; } Vi ...
- Emacs 设置C++代码风格
;; C++代码风格设置 (defconst cobbcpp '("linux" ; this is inheritance from the linux style (c-bas ...
- Android——SeekBar(拖动条)相关知识总结贴
Android进度条(ProgressBar)拖动条(SeekBar)星级滑块(RatingBar)的例子 http://www.apkbus.com/android-51326-1-1.html A ...
- cas 资源
http://blog.sina.com.cn/s/blog_6fda308501012tk2.html http://www.blogjava.net/xmatthew/archive/2008/0 ...
- apacheh2.4和php5.5集成环境遇到的问题
装了wampserver64位,里面的php是5.5,apache是2.4 1.配置虚拟主机时碰到问题:apache AH01630: client denied by server configur ...
- 详解C#特性和反射(一)
使用特性(Attribute)可以将描述程序集的信息和描述程序集中任何类型和成员的信息添加到程序集的元数据和IL代码中,程序可以在运行时通过反射获取到这些信息: 一.通过直接或间接的继承自抽象类Sys ...
- ajax之async属性
Ajax请求中的async:false/true的作用 官方的解释是:http://api.jquery.com/jQuery.ajax/ async Boolean Default: true By ...
- ARM与X86 CPU架构对比区别
CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是 CISC要用最少的机器语言 ...
- sublime Text 几款插件
留着自已以后用:http://blog.csdn.net/nivana999/article/details/7823805 1.sublime text实现vim命令格式(Vintage插件是自带的 ...
- 【九天教您南方cass 9.1】01 安装Cad和Cass9.1
同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程 今后会将cass的教程目录定期发布在测量空间中. 我是本节课主讲老师九天. [点击索取cass教程]5元立得 (给客服说暗号:“老王 ...