添加 ADO.Net 实体框架给出“项目的目标框架不包含实体框架运行时程序集”

Pau*_*ema 72 entity-framework-6 .net-6.0 visual-studio-2022

我在 VS2022 中的解决方案中添加了一个新的 .Net 6.0 项目。安装了EntityFramework 6.4.4。现在尝试install-package entityframework将 ADO.Net 实体框架模型添加到项目中。我收到错误:

该项目的目标框架不包含实体框架运行时程序集。请查看项目属性页面上的目标框架信息。

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

还在这里找到了这个主题:在 Visual Studio 2022 上添加实体框架模型,但那里没有答案。

重现步骤:

  1. 创建 .Net 6.0 控制台应用程序。
  2. install-package entityframework使用包管理器控制台窗口安装 EF6 包。
  3. 右键单击解决方案并选择“添加”=>“添加项目”。
  4. 在左侧窗格中单击“数据”。
  5. 选择“ADO.Net 实体框架模型”。
  6. 单击“添加”。

在此输入图像描述

出现错误:

在此输入图像描述

Ang*_*Oca 58

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

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

您需要从 NuGet 安装以下软件包:

Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools 
Run Code Online (Sandbox Code Playgroud)

在包管理器控制台中运行以下命令:(工具>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
Run Code Online (Sandbox Code Playgroud)

如果您想使用可信连接(来自 SimonDK 评论):

PM> Scaffold-DbContext "Server=HOST;Database=DB;Trusted_Connection=True;TrustServerCertificate=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Run Code Online (Sandbox Code Playgroud)

如果您需要更新数据库,您可以通过-Force 在末尾添加来更新模型。

  • @Kearl我希望这有帮助/sf/answers/1465169541/ (2认同)
  • 抱歉@kearl,我一开始不明白,也许你是在问这个:/sf/answers/2898930401/ (2认同)
  • 第二个链接是我需要的(ei -force)谢谢 (2认同)
  • 对于任何想要使用可信连接的人,我使用: PM> Scaffold-DbContext "Server=HOST;Database=DB;Trusted_Connection=True;TrustServerCertificate=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir 模型 -Force (2认同)

小智 20

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

截屏

  • 这会为 .Net 4.8 创建控制台应用程序 - 它不回答如何在 .Net 6 中执行此操作。 (13认同)
  • 这应该标记为答案 (2认同)

Pau*_*ema 9

问题是 .Net 6.0 的 EF 只能使用命令。一位同事给我发了这个链接:

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

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


小智 8

您需要从 NuGet 安装以下软件包:

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

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

Scaffold-DbContext {-Connection-string-in-quotations-} Microsoft.EntityFrameWorkCore.SqlServer -outputdir 存储库/模型 -context {-databasename-}DbContext -contextdir 存储库 -DataAnnotations -Force

要获取连接字符串“工具”>“连接到数据库”>“刷新”> 选择您的服务器或写入 . > 选择数据库
您将在服务器资源管理器选项卡中找到您的连接字符串。

> 示例

Scaffold-DbContext "Data Source=.;Initial Catalog=EDM;Integrated Security=True" Microsoft.EntityFrameWorkCore.SqlServer -outputdir Repository/Models -context MoDbContext -contextdir Repository -DataAnnotations -Force
Run Code Online (Sandbox Code Playgroud)

您将在解决方案中找到一个名为 Repository 的新文件夹。

提示:如果您不需要注释,可以删除 DataAnnotations -force


car*_*m85 7

请注意,截至 2022 年 10 月:

EF Core 不支持数据库模型的可视化设计器和向导来创建类似于 EF 6 的实体和上下文类。因此,我们需要使用 Scaffold-DbContext 命令进行逆向工程。此逆向工程命令根据现有数据库的架构创建实体和上下文类(通过派生 DbContext)。

该问题的一些答案中解释了如何执行此操作。更多信息可以在这里找到。

该解决方案提供与所选答案相同的结果。我想在幕后,它只是运行命令Scaffold-DbContext(显然还有更多)。我快速测试了这两种解决方案,它们产生了相同的结果。

有一个 Visual Studio 2022 扩展可以帮助解决此问题:EF Core Power Tools

从市场获取:

在此输入图像描述

从目标项目顶部的“解决方案资源管理器”上的上下文菜单中使用:

在此输入图像描述

我将在这个数据库中使用它:

在此输入图像描述

使用它时,您将看到以下内容:

在此输入图像描述

在此输入图像描述

在此输入图像描述

这就是您将得到的:

在此输入图像描述

请记住添加必要的依赖项。

这是有关如何使用它的快速教程。它还具有高级功能。GitHub 存储库位于此处

  • 我相信这是最合适的答案,因为:1)它利用了最新的微软技术、版本等;2)它不会让您降级到旧的.net版本或仅仅为了放入EF而使用不同的应用程序模板。@carloswm85 非常感谢你。 (2认同)
  • 绝对是最好的。我不想在系统中构建完整的表列表。另外,数据库团队不希望我使用代码优先。还是会想念设计师。 (2认同)

Cod*_*ard 6

.Net Core 5 和 .Net Core 6 都不支持使用在 Visual Studio 中使用“添加新项”->“ADO.NET 实体数据模型”窗口时启动的实体数据模型向导。

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

然而我喜欢不同的方法。相反,我向针对 .Net Framework 4.8 的解决方案添加了一个类库。然后在该类库中,我使用“添加新项”->“ADO.NET 实体数据模型”,它启动了为我的表创建数据模型的便捷向导。

然后,您可以构建该类库来处理该特定数据库的所有 EntityFramework 操作。或者,您可以安装 EntityFramework 包并引用原始项目中的类。只需确保记住将类库添加为解决方案中原始项目的引用和依赖项即可。

在向导为您生成类之后,您就可以真正对这些类执行任何您想要的操作。


归档时间:

查看次数:

66693 次

最近记录:

2 年,4 月 前