如何使用 .NET Core Class 库(.NET Standard)连接 SQL 服务器数据库?

How to connect with SQL Server database using .NET Core Class Library (.NET Standard)?

我刚刚开始创建 ASP.NET Core Web API 项目。我不太了解"ASP.NET Core .NET Standard Library"。

我正在使用 Visual Studio 2017 RC 创建此应用程序,并且在该应用程序中,我在存储库层采用了 Class 库(.NET 标准)类型的项目。

以下是相同的屏幕截图:

现在我想从存储库层连接到数据库。我创建了一个变量

IDbConnection con;

现在我正在尝试添加 System.Data 的引用,但我无法添加任何引用,因为当我打开添加引用 window 然后我收到以下消息:

No Framework assemblies were found on the machine.

如何使用 .NET Core Class 库(.NET Standard)连接到数据库?

.NET Standard Class 库不能通过直接引用 DLL 来工作,因为使用 .NET Core 不能保证框架将安装在系统上,.NET Core 应用程序也可以 运行 作为独立的应用程序,它随应用程序一起提供框架库,并且不需要 运行 之前安装时间。

您必须使用 NuGet 包管理器(或 project.json 或 VS2017 中的 *.csproj)来添加依赖项。对于 SQLServer,如果你想直接与数据库通信(即 w/o 一个 ORM),你需要添加 System.Data.SqlClient 包(link)。

以上答案 (Tseng) 可能在 2016 年和 .NET Standard 1.4 中有效,但与此同时,Microsoft 确实删除了一些阻碍因素,允许从 .NET Standard 2.1 库访问 SQL 服务器。请注意,旧的 System.Data.SqlClient 不会 link,因此您(真的!)必须通过 NuGet 引用 EF6 并更改一些使用。

  • 创建 .NET Standard Class 库并将版本置于 2.1

  • 安装Entity framework(这包含较低级别的库)

  • 使用时参考System.Data Microsoft.Data

使用的是:

using System.Data
using Microsoft.Data.SqlClient

现在,classDataSetSqlConnectionSqlClient 等“旧版”将可用。

它不完全兼容(还)有一些东西在.NET 标准 2.1 中不可用,例如枚举 LAN 上可用的 SQL 服务器。这是用 SqlDataSourceEnumerator 完成的,它是 System.Data 中的 class 我无法在 Microsoft.Data 中找到。

注意:我使用 .Net Core 3.1 控制台应用程序测试成功。可以从 .NET Core 调用如上配置的标准库并毫无问题地连接到数据库。您不能使用 .NET Framework 调用程序。