尝试在.Net Standard项目中设置Entity Framework核心

Joe*_*ski 29 c# entity-framework entity-framework-core .net-standard-2.0

我想知道我是否可以轻松地在.NET Standard 2.0项目中设置我的EntityFrameworkCore.我正在阅读本教程,但它需要.NET Core或Framework.

当我到达这一步时:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

启动项目'projectName'的目标是框架'.NETStandard'.没有与此框架关联的运行时,并且无法直接执行以其为目标的项目.要将Entity Framework核心软件包管理器控制台工具与此项目一起使用,请添加一个针对引用此项目的.NET Framework或.NET Core的可执行项目,并将其设置为启动项目; 或者,更新此项目以跨目标.NET Framework或.NET Core.

我想知道我是否可以在.NET Standard中设置我的实体,或者是否有我应该做的最佳实践?

Nig*_*888 27

启动项目'projectName'的目标是框架'.NETStandard'.没有与此框架关联的运行时,并且无法直接执行以其为目标的项目.要将Entity Framework核心软件包管理器控制台工具与此项目一起使用,请添加一个针对引用此项目的.NET Framework或.NET Core的可执行项目,并将其设置为启动项目; 或者,更新此项目以跨目标.NET Framework或.NET Core.

错误消息意味着:没有可执行的 .NET Standard项目.它没有运行时,因为它只是一个用于多个不同运行时的类型转发机制.

在编程术语中,它有点像尝试实例化接口.你不能这样做,因为没有实现可以运行.

解决方案是为您的应用程序选择一个可执行的平台来运行.您可以从exectuable中引用任意数量的.NET标准库(只要它们与您的运行时兼容),但是可执行文件本身不能在.NET Standard上运行.它必须以.NET Framework或.NET Core等平台为目标才能执行.

换句话说,为了使用命令来构建数据库,您必须以运行时为目标.因此,您需要在定位主可执行项目时运行此命令,或者在解决方案中添加新的可执行项目以运行它.

  • 我得到了这个的要点,但它对我来说仍然有点直观.如果我对.NETStandard项目运行ef命令,它应该能够看到并处理这种情况.可执行框架可以是应该生成相同的代码,对吧?无论如何,要添加答案,您可以使用Project和StartupProject开关进行修复:add-migration"some migration"--Project Some.NetStandard.Data -StartupProject SomeNetFrameworkOrNetCore.Project (7认同)
  • 因此,为了使用脚手架,我必须创建一些可执行类型项目,然后运行脚手架来创建所有类...并手动复制到我的.net标准类库或做一些技巧,使我可以访问这些文件. netstandard类库.这是一个黑客.必须有比这更好的方法.我对这篇SO帖子不感到不满,更多的是产品. (2认同)

Maj*_*aey 12

  1. 右键单击项目中的 .NET Core 应用

  2. 单击设置为启动项目

在此处输入图片说明

  • 不适合我。仍然遇到同样的错误。我的项目是`.NETFramework 4.8` (2认同)

Nic*_*ing 6

您可以dotnet ef migrations通过创建 .NET Core 项目、添加 .NET Standard 项目作为参考,然后使用--project--startup-project指定要针对哪个项目运行迁移来针对.NET Standard 项目运行。

dotnet ef migrations add MyNewMigrationName --project [pathToNetStandardProject] --startup-project [pathToNetCoreProject]