如何在不使用 EF 的情况下连接到 ASP.NET Core Web API 中的数据库?

Posted

技术标签:

【中文标题】如何在不使用 EF 的情况下连接到 ASP.NET Core Web API 中的数据库?【英文标题】:How do I connect to database in ASP.NET Core Web API without using EF? 【发布时间】:2017-07-21 14:47:06 【问题描述】:

我正在尝试在不使用 EF Core 的情况下创建 ASP.NET Core Web API。相反,我想使用 System.Data.SQLClient 连接到 SQL 服务器,并使用普通的旧 SQL 查询它。也就是说,我在弄清楚如何建立连接时遇到了一些麻烦。我在网上找到了很多关于如何使用 EF 执行此操作的教程。但是,如果没有它,我有点困惑。

【问题讨论】:

【参考方案1】:

您的操作方式与在任何 .net 应用程序中完全相同:

using (var conn = new System.Data.SqlClient.SqlConnection(connectionString)) 
    conn.Open();
    using (var cmd = conn.CreateCommand()) 
        cmd.CommandText = "SELECT 'hello world'";
        using (var reader = cmd.ExecuteReader()) 
            while (reader.Read()) 
                ...
            
        
    

您会发现 asp.net 核心的某些部分需要 EF,例如身份声明内容,因此您需要处理自己的身份验证,并且无法使用它们的安全属性等。我在几个 asp.net 核心项目上都走这条路,没有遗憾

【讨论】:

感谢蒂姆的回复。我更多地指的是我如何将它与 Web API 框架集成。我注意到 Startup.cs 中有一个 Configure 方法,但它似乎严重依赖依赖注入,这就是我苦苦挣扎的地方。很抱歉造成混乱,我应该更清楚地知道这个问题有两个部分。 您是否在询问如何构建服务并将其添加到 DI,该服务将成为 SqlConnection 对象的工厂,以尝试匹配 asp.net 核心的 DI 模式?什么具体不适合您? 我的问题是我有一个现有的数据库,我只想查询,并将结果推送到 REST API。我对教程的理解是,我应该在Startup.csConfigureServices 方法中启动数据库连接,然后在控制器类中执行我的命令。我是否误解了这个范式是如何设计的? 确保您使用的是最新版本的 dotnet core,否则 sqlclient 将不可用 模拟是在 ConfigureServices 中加载您的连接字符串,编写您自己的服务来实现一个接口,该接口基于该连接字符串创建一个 SqlConnection 对象,并让您的控制器方法获得对它的引用通过 DI 提供服务并使用它来创建 SqlConnections,而不必知道连接字符串......但你没有必须那样做【参考方案2】:

您必须使用 SqlConnection 和 SqlCommand 类。来自documentation

private static void CreateCommand(string queryString, string connectionString)

    using (SqlConnection connection = new SqlConnection(
           connectionString))
    
        SqlCommand command = new SqlCommand(queryString, connection);
        command.Connection.Open();
        command.ExecuteNonQuery();
    


CreateCommand("insert into...", "[your connection string]");

此外,Dapper 是访问数据的好选择,是扩展 IDbConnection 的对象映射器,因此您不必担心对象创建。来自 dapper 的文档

public class Dog

    public int? Age  get; set; 
    public Guid Id  get; set; 
    public string Name  get; set; 
    public float? Weight  get; set; 

    public int IgnoredProperty  get  return 1;  
            

var guid = Guid.NewGuid();
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new  Age = (int?)null, Id = guid );

【讨论】:

以上是关于如何在不使用 EF 的情况下连接到 ASP.NET Core Web API 中的数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用@符号连接到DB的情况下连接到DB。调用sqlplus UNAME @ DBNAME /密码@ \ Filelocation

在不设置 SRV 记录的情况下连接到 Google 帐户

如何在不存储凭据的情况下连接到KeyVault?

如何在不指定数据库名称的情况下连接到 PostgreSQL?

有啥方法可以在不使用 XMPP 协议的情况下连接到 Facebook 聊天服务?

在不安装客户端软件的情况下连接到 ***