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 上添加实体框架模型,但那里没有答案。
重现步骤:
install-package entityframework使用包管理器控制台窗口安装 EF6 包。出现错误:
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 在末尾添加来更新模型。
小智 20
首先,您需要选择正确的项目类型(即,在创建项目时,选择“Console App(.NET Framework)”,而不是“Console App”。这将解决上述错误。我也遇到了同样的错误使用 .NET 6 的 Visual Studio 2022,在进行此更正后得到解决

问题是 .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
请注意,截至 2022 年 10 月:
EF Core 不支持数据库模型的可视化设计器和向导来创建类似于 EF 6 的实体和上下文类。因此,我们需要使用 Scaffold-DbContext 命令进行逆向工程。此逆向工程命令根据现有数据库的架构创建实体和上下文类(通过派生 DbContext)。
该问题的一些答案中解释了如何执行此操作。更多信息可以在这里找到。
该解决方案提供与所选答案相同的结果。我想在幕后,它只是运行命令Scaffold-DbContext(显然还有更多)。我快速测试了这两种解决方案,它们产生了相同的结果。
有一个 Visual Studio 2022 扩展可以帮助解决此问题:EF Core Power Tools
从市场获取:
从目标项目顶部的“解决方案资源管理器”上的上下文菜单中使用:
我将在这个数据库中使用它:
使用它时,您将看到以下内容:
这就是您将得到的:
请记住添加必要的依赖项。
这是有关如何使用它的快速教程。它还具有高级功能。GitHub 存储库位于此处。
.Net Core 5 和 .Net Core 6 都不支持使用在 Visual Studio 中使用“添加新项”->“ADO.NET 实体数据模型”窗口时启动的实体数据模型向导。
正如其他人提到的,您可以将目标版本更改为 .Net Framework 4.8 或类似版本以启用此向导。
然而我喜欢不同的方法。相反,我向针对 .Net Framework 4.8 的解决方案添加了一个类库。然后在该类库中,我使用“添加新项”->“ADO.NET 实体数据模型”,它启动了为我的表创建数据模型的便捷向导。
然后,您可以构建该类库来处理该特定数据库的所有 EntityFramework 操作。或者,您可以安装 EntityFramework 包并引用原始项目中的类。只需确保记住将类库添加为解决方案中原始项目的引用和依赖项即可。
在向导为您生成类之后,您就可以真正对这些类执行任何您想要的操作。
| 归档时间: |
|
| 查看次数: |
66693 次 |
| 最近记录: |