是否可以在 .NET Standard 2.0 class 库中使用 Entity Framework 6.3.0?

Is it possible to use Entity Framework 6.3.0 in a .NET Standard 2.0 class library?

是否可以在 .NET Standard 2.0 class 库中使用 Entity Framework 6.3.0?

Dependencies -> Packages中我参考了Entity Framework6.3.0

我有这样的代码:

using System.Data.Entity;

public partial class AlertContext : DbContext

但我收到以下错误:

The type or namespace name 'Entity' does not exist in the namespace 'System.Data' (are you missing an assembly reference?)

The type or namespace name 'DbContext' could not be found (are you missing a using directive or an assembly reference?)

6.3.0 是第一个面向 .NET Standard 的 Entity Framework6 版本;它以 .NET Standard 2.1 以及 .NET 4.0 和 .NET 4.5 为目标,正如在 its Nuget listing. 6.2.0 中看到的那样,仅以 .NET 为目标。

请注意,.NET Standard 2.0 仍然不是有效目标。

根据您的情况,您可能能够将您的库多目标定位到 .NET(在我下面的示例中,.NET 4.7.2)和 .净标准 2.1:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>   
    <TargetFrameworks>net472;netstandard2.1</TargetFrameworks>
  </PropertyGroup>
</Project>

这是否可行取决于两个因素:

  • 您的其他参考资料。我上面提供的组合在大多数情况下都很好,因为 .NET 4.7.2 和 .NET Standard 2.1 可以引用 .NET Standard 2.0 包,它涵盖了大多数但绝不是所有现代包。

  • 您希望从中使用您的库的框架。当然,.NET 目标意味着该库可以由相同 .NET 版本或更高版本的 .NET Framework 项目使用。 .NET Standard 2.1 目标允许以 .NET Standard 2.1、.NET Core 3.0、Mono 6.4 和更高版本以及最新版本的 Xamarin 为目标的项目使用该库。 notable 遗漏是 .NET Core 3.0 之前的版本。 EF6 可用于 .NET Core 1 或 2。有关完整列表,请参阅 .NET 标准 .NET implementation support table。

* 我使用 .NET 4.7.2 进行说明,因为虽然 .NET 4.6.1 正式支持 .NET Standard 2.0,但 Microsoft 建议使用 4.7.2 或更高版本。有关详细信息,请参阅 my answer here

我找到了两个替代方案:

  1. 将 EF 降级到较低版本 (6.2) 或
  2. Nuget 安装 Microsoft.EntityFrameworkCore 并使用以下命令: using Microsoft.EntityFrameworkCore; public partial class AlertContext : DbContext