【问题标题】:Changing the database from SQL Server to PostgreSQL in creating ASP.NET web application?在创建 ASP.NET Web 应用程序时将数据库从 SQL Server 更改为 PostgreSQL?
【发布时间】:2019-07-14 01:56:01
【问题描述】:

我目前使用 SQL Server 作为数据库,使用 Dapper (ORM) 将关系映射到模型类。我在 Dapper 中使用了多次读取,因此我能够在一次调用数据库时获取多个表。但由于某种情况,我不得不将我的数据库连接从 SQL Server 更改为 PostgreSQL。在 Postgresql 中,没有用于使用查询多次读取功能的选项工具。

Postgresql 有没有办法处理下面的情况?

using (var multi = conn.QueryMultiple(query, param, commandType: CommandType.StoredProcedure))
{
    obj.InventoryItemOrder = multi.Read<InventoryItemOrder>()
                                  .FirstOrDefault();  //getting single object data (so firstordefault)
    obj.InventoryItemDataModel = multi.Read<InventoryItemDataModel>();    //list
}

在构建 ASP.NET 应用程序时,我可以在处理 PostgreSQL 和 Dapper 时使用这个概念吗?

【问题讨论】:

  • 您的问题只需尝试一下即可轻松验证。您为什么不尝试一下并发布任何问题

标签: asp.net postgresql dapper


【解决方案1】:

我不熟悉Dapper,但是快速浏览at the doc,似乎QueryMutiple基本上在同一个命令中运行多个语句(即用分号分隔)然后映射每个语句的结果。

您当然可以使用 Postgres 完成第一部分:将多个语句组合成一个用分号分隔的语句。它们都将运行。但是,我不知道 Postgres 本身有任何东西会自动分别返回语句的结果。根据您与 Postgres 的交互方式和获取结果的具体方式,您或许可以创建一个自定义方法来映射这些结果。

从纯粹的数据库角度来看,只要您在同一连接上发出单独的查询,您就不会从 QueryMultiple 中描述的行为中获得太多(如果有的话)性能优势。

连接的启动和拆除是昂贵的,甚至 Dapper 也必须为每个查询发布和映射结果,因此没有性能优势。相反,它本质上是一个语法糖问题。

如果 DapperPostgres 兼容,快速查看文档并不清楚。如果是,并且那里支持它的QueryMultiple 调用,那么它可能正在处理 ORM 本身内的多个语句的映射。

但是,如果 Dapper 不支持 Postgres,我建议简单地单独发出查询并单独处理它们的结果。

【讨论】:

  • 我曾经以为用dapper做mapper我们会一口气把两张表调用到数据库,对吗@khampson?
  • 这个techbrij.com/asp-net-core-postgresql-dapper-crud 说你可以使用 Postgresql。
  • PostgreSQL 不支持 Dapper 的 QueryMultiple() 方法?我认为是因为 PostgreSQL 不会在一次调用数据库中返回多个表。
  • @Nick.McDermaid:啊,好的。谢谢。
  • @DiwasPoudel:我知道没有任何原生 Postgres 方法可以在一次调用中返回多个结果集。如果你在同一个语句中运行两个selects,你最终只会得到第二个的结果。
猜你喜欢
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多