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

Giu*_*eri 7 entity-framework entity-framework-6 .net-standard

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

Dependencies -> Packages我有一个对实体框架 6.3.0 的引用

我有这样的代码:

using System.Data.Entity;

public partial class AlertContext : DbContext
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

命名空间“System.Data”中不存在类型或命名空间名称“Entity”(您是否缺少程序集引用?)

找不到类型或命名空间名称“DbContext”(您是否缺少 using 指令或程序集引用?)

Ste*_*edy 14

6.3.0 是第一个面向 .NET Standard 的 Entity Framework 6 版本;它针对 .NET Standard 2.1以及 .NET 4.0 和 .NET 4.5,如其 Nuget 列表所示6.2.0 only targeted .NET.

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

Depending on your scenario, you might be able to get away with multi-targeting your library to .NET (in my example below, .NET 4.7.2) and .NET Standard 2.1:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>   
    <TargetFrameworks>net472;netstandard2.1</TargetFrameworks>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

Whether this is viable depends on 2 factors:

  • Your other references. The combination I offer above will be fine in most cases as .NET 4.7.2 and .NET Standard 2.1 can reference .NET Standard 2.0 packages, which covers most but by no means all modern packages.

  • 您希望从中使用库的框架。当然,.NET 目标意味着该库可以被相同 .NET 版本或更高版本的 .NET Framework 项目使用。.NET Standard 2.1 目标允许面向 .NET Standard 2.1、.NET Core 3.0、Mono 6.4 和更高版本以及最新版本的 Xamarin 的项目使用该库。值得注意的遗漏是 3.0 之前的 .NET Core 版本。EF6不适用于 .NET Core 1 或 2。有关完整列表,请参阅 .NET Standard .NET 实现支持表。

* 我使用 .NET 4.7.2 进行说明,因为虽然 .NET 4.6.1 正式支持 .NET Standard 2.0,但 Microsoft 建议使用 4.7.2 或更高版本。请在此处查看我的回答以获取更多信息。

  • .NET Standard 2.0 会成为攻击目标吗?对于我们这些使用 .NET Framework 4.8(最新版本)的项目和网站的人来说,其中许多使用 Entity Framework 6(当前为 6.4.4),这使得迁移到 .NET Core(很快将成为 .NET 5)变得困难,如果不是实际上不可能的话。 (4认同)