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

Trying to set-up Entity Framework core in .Net Standard project

我想知道我是否可以轻松地在 .NET Standard 2.0 项目中设置我的 EntityFrameworkCore。我正在关注这个 Tutorial 但它需要 .NET Core 或 Framework。

当我走到这一步时:

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

我收到这个错误:

Startup project 'projectName' targets framework '.NETStandard'. There is no runtime associated with this framework, and projects targeting it cannot be executed directly. To use the Entity Framework Core Package Manager Console Tools with this project, add an executable project targeting .NET Framework or .NET Core that references this project, and set it as the startup project; or, update this project to cross-target .NET Framework or .NET Core.

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

Startup project 'projectName' targets framework '.NETStandard'. There is no runtime associated with this framework, and projects targeting it cannot be executed directly. To use the Entity Framework Core Package Manager Console Tools with this project, add an executable project targeting .NET Framework or .NET Core that references this project, and set it as the startup project; or, update this project to cross-target .NET Framework or .NET Core.

错误消息的意思是:没有 可执行文件 .NET Standard 项目这样的东西。它没有 运行 时间,因为它只是一个用于多个不同 运行 时间的类型转发机制。

在编程术语中,它是 。你不能这样做,因为 运行.

没有实现

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

换句话说,为了使用命令搭建您的数据库,您必须瞄准一个 运行时间。因此,您将需要 运行 此命令,同时以您的主要可执行项目为目标,或者将新的可执行项目添加到您的解决方案以 运行 它打开。

您可以使用选项在 CLI 上执行此操作 运行 --启动项目=[Path_to_your_main_Project]

其实我也在尝试这样做。我得到了脚手架,但 Net Standard 似乎没有加载 table 属性的扩展。

确保为 EF 安装 EntityFrameworkCore.Tools 包。您只需要默认的 4.6.1 支持。如果我弄清楚如何解决扩展问题,我会 post 在这里。

这两个是必需的:
安装包 Microsoft.EntityFrameworkCore.SqlServer
安装包 Microsoft.EntityFrameworkCore.Tools

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

  2. 单击设置为启动项目

假设您在解决方案中已经有一个可执行的启动项目,以下从 dotnet CLI 开始工作:

dotnet ef dbcontext scaffold "Server=myServerName; Database=dbName; User Id=someUser; Password=myPassword123;" Microsoft.EntityFrameworkCore.SqlServer  --project ../MyLibraryProject/ -c MyDbContext -o FolderName

您可以在此处找到更多信息:

https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet#other-target-frameworks

这里的问题是 .csproj 文件中的这一行

<TargetFramework>netstandard2.0</TargetFramework>

改为

<TargetFramework>netcoreapp2.1</TargetFramework>

或者无论您的主要项目所针对的 .net 核心版本是什么,它对我有用,它也应该对您有用!! :)

第一步:
添加 ProjectReference 您的项目 .netstandar".

第 2 步:
您可以使用参数 -Project "your project .netstandar".

您可以 运行 dotnet ef migrations 针对 .NET Standard 项目,方法是创建一个 .NET Core 项目,添加您的 .NET Standard 项目作为参考,然后使用 --project--startup-project 指定 运行 迁移所针对的项目。

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

我也来分享一下我的经验,说不定能帮别人省点时间。

在我的例子中,我将多个项目设置为启动项目,运行迁移给了我这个错误问题状态。

解决方案:

我将多个启动项目更改为单个项目,迁移生成成功!