添加 ADO.Net Entity Framework 得到 "The project's target framework does not contain Entity Framework runtime assemblies"

Adding ADO.Net Entity Framework gives "The project's target framework does not contain Entity Framework runtime assemblies"

我在 VS2022 中的解决方案中添加了一个新的 .Net 6.0 项目。安装了 EntityFramework 6.4.4。使用 install-package entityframework,现在尝试将 ADO.Net Entity Framework 模型添加到项目中。我得到一个错误:

The project's target framework does not contain Entity Framework runtime assemblies. Please review the target framework information on the project's property page.

我已经尝试添加其他几个 EF 包(根据此处的文档,这应该不是必需的:https://docs.microsoft.com/en-us/ef/ef6/fundamentals/install)。我认为问题出在我的安装上,但我创建了一个包含问题的 .Net 6.0 控制台应用程序并将其发送给一位同事,他也收到了同样的消息。

也在此处找到此主题: 但那里没有答案。

重现步骤:

  1. 创建 .Net 6.0 控制台应用程序。
  2. 使用包管理器控制台 install-package entityframework 安装 EF6 包 window。
  3. 右键单击解决方案并选择 'Add' => 'Add item'。
  4. 在左窗格中单击 'Data'。
  5. 选择'ADO.Net Entity Framework型号。
  6. 点击'Add'。

出现错误:

EF 6 工具仅适用于 .NET Framework 项目,您必须将其添加到解决方案中,然后复制或 link 到生成的代码中。另外,不支持.NET Core项目中的EDMX文件,但是有workarounds

问题是 .Net 6.0 的 EF 仅适用于命令。同事发给我这个 link:

https://www.entityframeworktutorial.net/efcore/create-model-for-existing-database-in-ef-core.aspx

那里解释了 Scaffold-DbContext 命令,它工作得很好。

尝试手动安装较低版本的 Dot Net Framework 或使用 visual studio 安装程序修改版本。 创建项目后,右键单击并转到属性,您可以在其中更改目标版本。 我将其更改为 4.8,ADO 实体模型对我来说工作正常

你必须首先select控制台应用程序(.Net Framework) 不是控制台应用程序

首先,您需要选择正确的项目类型(即,在创建项目时,选择“Console App (.NET Framework)”,而不是“Console App”)。这将解决上述错误。我在使用 .NET 6 的 Visual Studio 2022 中遇到了同样的错误,在进行此更正后得到解决

.Net Core 5 和 .Net Core 6 都不支持使用 'Add New Item' -> 'ADO.NET Entity data Model' window 时启动的实体数据模型向导 Visual Studio.

正如其他人提到的,您可以将目标版本更改为 .Net Framework 4.8 或类似版本以启用此向导。

不过我喜欢另一种方法。相反,我将 class 库添加到我的针对 .Net Framework 4.8 的解决方案中。然后在那个 class 库中,我使用 'Add New Item' -> 'ADO.NET Entity data Model' 来启动为我的表创建数据模型的便捷向导。

然后您可以构建这个 class 库来处理您对该特定数据库的所有 EntityFramework 操作。或者您可以安装 EntityFramework 包并从原始项目中引用 classes。请确保您记得将 class 库添加为解决方案中原始项目的引用和依赖项。

在向导为您生成 classes 之后,您真的可以随心所欲地使用它们。

我知道几乎所有其他答案都建议更改目标框架,但有些用户(包括我)需要使用 .NET 6.0 而不是 .NET Framework,因此该解决方案不适用于我们.

我能够通过使用 Paul Sinnema 的 link 并使用 SQL 身份验证而不是 Windows Auth(在我的例子中)来创建模型:

您需要从 NuGet 安装以下包:

Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools 

Afted 运行 在包管理器控制台中执行以下命令: (工具>Nuget 包管理器>包管理器控制台)

PM> Scaffold-DbContext "Server=.\LOCAL_SERVER;User ID=YOUR_DB_USER;Password=YOUR_DB_PASSWORD;Database=YOUR_DATABASE;Trusted_Connection=False;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models