.NET Core,PostgreSQL和文档数据库

 

介绍

用软件处理文档很有趣。这意味着存储适合您的代码,而不是相反。这样可以消除应用程序建模与模型存储之间的对象关系阻抗不匹配。

即使您没有立即使用文档,学习如何使用文档也将拓宽存储系统的视野。

总是有不止一种方法来完成某件事。当要在我家附近工作时,我最喜欢的一点是根本不做。我采用这种方法来美化环境、割草,做其他家务活以及我可以摆脱的其他一切。[有人曾经说过,您总是可以告诉房子,那是IT人员拥有的房子——它通常在附近的院子里看起来最糟]

对于数据库,我们有多种使用持久性的方法。两种常见的方法是关系数据库RDBMS),另一种是NoSQL(文档)数据库。是的,您猜对了,这篇文章不是关于两者之间的差异或比较,而是旨在在关系数据库系统中实现NoSQL持久性。是的,您可以同时拥有它们,它们应该在您的解决方案中达到目的。稍后我们将看到PostgreSQL(通常是RDBMS)如何使您非常轻松地完成此操作,这将很有趣。

数据库是任何业务应用程序的基本组成部分。我们已经使用关系数据库很长时间了,并且也享受或遭受过它的优缺点。近年来,我们已经看到NoSQL(文档)数据库的增长,并且它们在各种情况下都非常有用。

在本文中,我将大致介绍文档,然后向您展示使用.NET CorePostgreSQLEntity Framework处理文档的简单实现。

该文章的结构分为以下几节:

  • 文档数据库(有关基于文档的数据库的一般讨论)
  • 解决方案设置(使用必要的工具设置.NET Core解决方案)
  • API实现(Web API控制器实现)

为了使讨论更加集中,我跳过了一些详细信息,并提到了必要的资源(如果您想查看更多信息)。该文章将使您对实现文档持久性的理论有一个很好的了解。

什么是文档

您如何看待存储的文档将对整个项目产生重大影响。

请记住:规范化规则不适用于文档存储。因此,将您的归一化思维抛到窗外。

文档可以随心所欲,自由带来了一个非常普遍的选择悖论:太多选择。您如何选择?好吧,让我们将案例范围缩小为三种思维方式。

  • 领域模型
  • 处理结果
  • 真实文件

领域模型

首先是像开发人员一样思考。您可以轻松地制作文档来表示域模型。这是考虑文档的一种完全可以接受的方式。

流程结果(或事务或事件源)

另一种思考方式就像信息贮藏者或DBA。您可以将文档设计为应用程序中多个过程或事件(如果可以的话,为事件源)的结果。

下面显示的示例代表结帐过程。因此,一个领先的过程是运输过程:

真实文件

考虑文档的第三种方式就像是业务人员。采购订单、营销表、销售订单和发票。如果愿意,您几乎可以直接在数据库中表示所有这些信息。会有重叠,但是在文档库系统中重叠是可以的。

方法

我们不必将自己限制在以上三个中的任何一个上,我们可以做所有三个。

包含流程所有结果的大文件。也可以认为是事件源

使用.NET CorePostgreSQL中保留文档

现在,我们对文档有了一些了解,让我们看看如何在代码中实现它。我以前写过有关PostgreSQL文章,如果愿意,可以参考该文章。这是一个关系数据库系统,但它也使用其数据类型json/jsonb支持文档持久性。

PostgreSQL文档中定义的数据类型jsonjsonb几乎完全相同。关键区别在于json数据存储为JSON输入文本的精确副本,而jsonb以分解的二进制形式存储数据;也就是说,不是作为ASCII / UTF-8字符串,而是作为二进制代码。

我将使用.NET CoreWebAPI)来实现与PostgreSQL交互的简单API。我也将采用实体框架数据库查询,但是我不会讨论有关解决方案是如何设置的详细信息,如果您需要有关这些主题的更多信息,你可以在互联网上搜索。

好的,让我们开始吧。

解决方案设置

我使用WebAPI项目创建了一个典型的.NET Core解决方案。我还添加了两个.NET标准库项目,分别为Core域模型和数据库层提供了单独的层。同样,有关分步详细信息,请查阅前面提到的我的书。

为了使用postgreSQL,我添加了实体框架和与postgreSQL相关的nuget包。下图显示了已安装软件包的解决方案设置。

这个设置非常基础,我在前面提到的书中逐步介绍了它 

领域设置

请记住,从前面的讨论中可以知道,领域模型(检查Core Project)是对文档建模的一种方法,反之亦然。下图显示了一个非常简单的领域模型,该模型很容易解释,我们将其持久化到postgreSQL

实体框架设置

现在,我们有了领域模型,我们将如下设置实体框架(检查数据项目)映射:

依赖注入设置

Web Project中,我为postgreSQL设置了DI,如下所示。我还在appsettings.json文件中定义了连接字符串

创建和应用迁移

一旦完成所有必要的布线设置,便可以运行实体框架迁移工作流来创建数据库/表。

以下是创建的相应迁移(请注意jsonb数据类型):

审核后,我们可以按以下方式应用迁移:

.NET Core WebAPICRUD功能)

我创建了一个API控制器来公开文档上的各种操作。让我们看看它们是如何实现的。我试图使实现非常简单,但是可以根据需要随意调整代码。客户端代码也是如此,您可以使用AngularReact或任何技术构建应用程序,我将使用POSTMAN进行REST调用。

创建(Post)文档

这是方法的实现,这是一个典型的POST请求,我们通过dbcontext对其进行持久化:

阅读(Get)文档

这是用于从数据库读取文档的代码和PostMan请求块:

删除文件

以下代码显示了Delete Request的实现:

LINQ查询摘要信息

以下查询显示摘要数据的实现。您也可以执行其他LINQ查询,请参考文档以获取更多详细信息:

概要

使用文档可以简化许多编码任务。PostgreSQL是一种选择。还有许多其他NoSQL(文档)数据库可用,例如MangoDbRethinkDb和面向文档的数据库的概念是相同的。

.NET CoreEntityFramework支持并简化PostgreSQL入门,但是您可以对Node或其他技术进行相同的操作。您可以从这个git repo下载源代码。

其他连结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值