创建一个 .NET Core Rest API 应用程序以支持来自应用程序的不同数据库

Posted

技术标签:

【中文标题】创建一个 .NET Core Rest API 应用程序以支持来自应用程序的不同数据库【英文标题】:Create a .NET Core Rest API Application to Support different databases from the Application 【发布时间】:2021-10-18 04:31:50 【问题描述】:

我正在尝试了解如何使用 .NET Core 5 在 C# 中创建 RestApi 应用程序以支持 SQL Server 和 mysql,未来可能还会支持其他数据库。

我只使用 sql 的 Select 命令(仅读取操作) 有复杂的查询,需要连接表和获取数据。 我在查询中遇到了支持这两个数据库的挑战。

SQL Server 使用 SqlParameter 而 MySQL 使用 MySqlParameter 但是 实际的选择查询适用于这两种数据库类型。

        using var cmd = Db.Connection.CreateCommand();
        cmd.CommandText = @"select  * from Table1";
        cmd.Parameters.Add(new SqlParameter
        
            ParameterName = "@ID",
            DbType = DbType.Int32,
            Value = ID,
        );

请建议有更好的方法吗? 我查看了 EF Core,但找不到确切的解决方案。

【问题讨论】:

使用 OdbcCommand? SqlParameter 和 MySqlParameter 派生自同一个东西,与连接、命令等相同。使用 Dapper 也有助于减少代码量 @CaiusJard 但是 DbParameter 是一个抽象类。不能使用它代替 SqlParameter 或 MySqlparameter 你了解多态的工作原理吗? 【参考方案1】:

DbCommand 有一个CreateDbParameter,它将创建与您的 DbCommand 匹配的正确具体实现的 DbParameter 实例。

在您的代码中,这将像这样使用:

using var cmd = Db.Connection.CreateCommand();
cmd.CommandText = @"select  * from Table1";

var param = cmd.CreateDbParameter();
param.ParameterName = "@ID",
param.DbType = DbType.Int32,
param.Value = ID,

cmd.Parameters.Add(param);

或者使用DbProviderFactory 上的CreateDbParameter 方法用于您的数据库,您可以从DbProviderFactories.GetFactory 获得它的实现

关于如何在微软网站上获得工厂的信息:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/obtaining-a-dbproviderfactory

【讨论】:

以上是关于创建一个 .NET Core Rest API 应用程序以支持来自应用程序的不同数据库的主要内容,如果未能解决你的问题,请参考以下文章

从 .NET Core 应用程序同时提供 REST 和 GraphQL API

用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识

csharp .NET Core中的Azure通知中心REST API [读取/删除通道的所有注册]

CORS 错误:LinkedIn 身份验证; .NET Core 5 REST API

使用 Angular 的 CORS 问题:8.2.14 和 .NET CORE 3.1 REST API 授权

使用 LXD REST API,ClientWebSocket 在 .Net Core 上抛出“AuthenticationException”,但在 .Net Framework 上,它运行良好