.NET Framework MVC 项目引用生成 EF Core dbcontext 的 .NET Standard 2.0 项目。为什么它不起作用?
.NET Framework MVC project referencing a .NET Standard 2.0 project that generates a EF Core dbcontext. Why doesnt it work?
我有一个项目使用 CORE RAZOR PAGES Web 项目和两个 .net 标准 2.0 class 库完成。一个是基础设施 class 而不是我的 DbContext。
所以我被告知我需要使用 .NET Framework Classic 作为 Web 界面而不是核心。由于 .NET Framework 4.7.2 和 .NET core 2.2 对 .NET 标准 2.0 有效,我想我可以有一个新的 Web 项目,但保留两个 class 库。
所以我引用了两个 class 库并使用控制台 运行 'update-database'。启动项目是 .NET Framework MVC 项目,'Default Project' 是 .NET 标准 2.0 class 库。但是我得到错误
您的启动项目 'Sr.RazorFrame' 没有引用 Microsoft.EntityFrameworkCore.Design。 Entity Framework 核心工具需要此包才能工作。确保您的启动项目正确,安装包,然后重试。
所以它说我的项目需要一个 CORE Nuget 包,但我不能这样做,因为它是 .NET Framework...我很困惑...所以有 Microsoft.EntityFrameworkCore.Design 用于 STANDARD 吗?
but I can't do that since it is .NET Framework.
实际上,您可以在 .NET Framework
项目中使用 Microsoft.EntityFrameworkCore.Design
。
So Is there a Microsoft.EntityFrameworkCore.Design for STANDARD ?
如果您查看 Microsoft.EntityFrameworkCore.Design
包 (v2.2.6
),您会发现有一个 net461
版本和一个 netstandard2.0
:
├───build
│ ├───net461
│ └───netcoreapp2.0
├───lib
│ ├───net461
│ └───netstandard2.0
├───package
│ └───services
│ └───metadata
│ └───core-properties
└───_rels
所以在经典的 ASP.NET MVC
WebApp 中使用它会很好。
对于 .NET Framework 项目中的 运行 ef-core
工具,请确保您已添加以下包:
Microsoft.EntityFrameworkCore.Design
包
Microsoft.EntityFrameworkCore.Tools
个包。
如果您正在使用 SqlServer
,请随意安装 Microsoft.EntityFrameworkCore.SqlServer
包。
最后,您可以在 .NET Framework 项目中 运行 Add-Migration
和 Update-Database
:
PM> Add-Migration InitialCreate -Project Your.Standard.Lib.That.Contains.DbContext
To undo this action, use Remove-Migration.
PM> Update-Database -Project Your.Standard.Lib.That.Contains.DbContext
Applying migration '20190905015739_InitialCreate'.
Done.
PM>
虽然这种方法有效,但我怀疑它是否值得。因为您甚至可以 运行 ef-core
在纯 .NET Standard2.0
库中进行迁移:
- 添加一个额外的目标框架名称,例如
netcoreapp2.1
。参见
- 不要忘记添加对
Microsoft.EntityFrameworkCore.Design
的引用。如果您还没有安装 ef-core 工具,请同时安装 Microsoft.EntityFrameworkCore.Tools
- 添加具有无参数构造函数的 DbContext,或创建 DesignTime 工厂。有关详细信息,请参阅 official docs
我有一个项目使用 CORE RAZOR PAGES Web 项目和两个 .net 标准 2.0 class 库完成。一个是基础设施 class 而不是我的 DbContext。
所以我被告知我需要使用 .NET Framework Classic 作为 Web 界面而不是核心。由于 .NET Framework 4.7.2 和 .NET core 2.2 对 .NET 标准 2.0 有效,我想我可以有一个新的 Web 项目,但保留两个 class 库。
所以我引用了两个 class 库并使用控制台 运行 'update-database'。启动项目是 .NET Framework MVC 项目,'Default Project' 是 .NET 标准 2.0 class 库。但是我得到错误
您的启动项目 'Sr.RazorFrame' 没有引用 Microsoft.EntityFrameworkCore.Design。 Entity Framework 核心工具需要此包才能工作。确保您的启动项目正确,安装包,然后重试。
所以它说我的项目需要一个 CORE Nuget 包,但我不能这样做,因为它是 .NET Framework...我很困惑...所以有 Microsoft.EntityFrameworkCore.Design 用于 STANDARD 吗?
but I can't do that since it is .NET Framework.
实际上,您可以在 .NET Framework
项目中使用 Microsoft.EntityFrameworkCore.Design
。
So Is there a Microsoft.EntityFrameworkCore.Design for STANDARD ?
如果您查看 Microsoft.EntityFrameworkCore.Design
包 (v2.2.6
),您会发现有一个 net461
版本和一个 netstandard2.0
:
├───build
│ ├───net461
│ └───netcoreapp2.0
├───lib
│ ├───net461
│ └───netstandard2.0
├───package
│ └───services
│ └───metadata
│ └───core-properties
└───_rels
所以在经典的 ASP.NET MVC
WebApp 中使用它会很好。
对于 .NET Framework 项目中的 运行 ef-core
工具,请确保您已添加以下包:
Microsoft.EntityFrameworkCore.Design
包Microsoft.EntityFrameworkCore.Tools
个包。
如果您正在使用 SqlServer
,请随意安装 Microsoft.EntityFrameworkCore.SqlServer
包。
最后,您可以在 .NET Framework 项目中 运行 Add-Migration
和 Update-Database
:
PM> Add-Migration InitialCreate -Project Your.Standard.Lib.That.Contains.DbContext
To undo this action, use Remove-Migration.
PM> Update-Database -Project Your.Standard.Lib.That.Contains.DbContext
Applying migration '20190905015739_InitialCreate'.
Done.
PM>
虽然这种方法有效,但我怀疑它是否值得。因为您甚至可以 运行 ef-core
在纯 .NET Standard2.0
库中进行迁移:
- 添加一个额外的目标框架名称,例如
netcoreapp2.1
。参见 - 不要忘记添加对
Microsoft.EntityFrameworkCore.Design
的引用。如果您还没有安装 ef-core 工具,请同时安装Microsoft.EntityFrameworkCore.Tools
- 添加具有无参数构造函数的 DbContext,或创建 DesignTime 工厂。有关详细信息,请参阅 official docs