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

时间:2018-02-07 22:00:14

标签: c# entity-framework entity-framework-core .net-standard-2.0

我想知道我是否可以轻松地在.NET Standard 2.0项目中设置我的EntityFrameworkCore。我遵循这个encrypted or zipped但它需要.NET Core或Framework。

当我走到这一步时:

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

我收到了这个错误:

  

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

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

8 个答案:

答案 0 :(得分:21)

  

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

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

在编程术语中,它是a bit like trying to instantiate an interface。你不能这样做,因为没有实现可以运行。

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

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

答案 1 :(得分:2)

这里的第一个答案。我实际上也试图这样做。我得到了脚手架,但Net Standard似乎没有加载表格属性的扩展。

确保为EF安装EntityFrameworkCore.Tools包。您只需要4.6.1支持,这是默认支持。如果我弄清楚如何解决扩展问题,我将在此处发布。

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

答案 2 :(得分:2)

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

createTransport

将其更改为

<TargetFramework>netstandard2.0</TargetFramework>

或您的主要项目所针对的.net核心版本,它对我有用,它也对您有用! :)

答案 3 :(得分:1)

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

  2. 单击“设置为启动项目”

答案 4 :(得分:1)

第一步:
将ProjectReference添加到您的项目.netstandar”。

第二步:
您可以使用参数-Project“您的项目.netstandar”。

答案 5 :(得分:1)

我也会分享我的经验,也许可以为别人节省时间。

就我而言,我将多个项目设置为启动项目,运行迁移给了我这个问题所述的错误。

解决方案:

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

答案 6 :(得分:0)

如果您在解决方案中已经有可执行的启动项目,则可以通过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

答案 7 :(得分:0)

您可以通过创建.NET Core项目,将.NET Standard项目添加为引用,然后使用dotnet ef migrations--project来对.NET Standard项目运行--startup-project哪个项目可以执行迁移。

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