Scaffold-DbContext到不同的输出文件夹

Ald*_*jal 4 c# entity-framework-core

我正在我工作的公司解决方案中实现存储库模式,将后端项目和数据库上下文中的模型类以及DbContexts项目中的迁移分开。

我正在使用Scaffold-DbContext将后端项目设置为模型类目标的默认项目,但是DbContext类始终与模型类在同一文件夹中创建。是否可以将DbContext类的创建重定向到其他输出文件夹,就我而言,重定向到DbContexts项目?

Eri*_*kEJ 10

是的,您可以使用我的“EF Core Power Tools”免费 Visual Studio 扩展来做到这一点:

https://github.com/ErikEJ/SqlCeToolbox/wiki/EF-Core-Power-Tools


Luc*_*aSC 5

现在可以使用-Co​​ntextDir选项重定向生成的上下文:

-ContextDir 放置DbContext文件的目录。路径是相对于项目目录的。

因此,在您的情况下,将是这样的:

Scaffold-DbContext "*connection*" "*provider*" -OutputDir "BackendProject" -ContextDir "DbContexts"
Run Code Online (Sandbox Code Playgroud)

来源:https : //docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell


EJo*_*ica 5

我遇到了类似的问题。我在一个单独的项目中有我的 EF 模型。为了在那里编写模型,我只使用了以下命令:

Scaffold-DbContext "Server=[Server];Database=[Database Name];Trsted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Project "[Project Name]" -Force 
Run Code Online (Sandbox Code Playgroud)

对我来说,关键是-Project "[Project Name]" -Force选择。

正如最上面的答案所示,如果您想在该项目中使用不同的文件夹,则可以使用该-OutputDir选项。


ihe*_*heb 5

您可以在不同的项目(不仅是同一项目中的不同文件夹)中生成模型和 DBContext,如下所示:

Scaffold-DbContext "connectionString" Microsoft.EntityFrameworkCore.SqlServer -ContextDir "C:\MySolution\DataAccessLayer\Context" -OutputDir "C:\MySolution\DomainLayer\Models" -Namespace "DomainLayer.Models" -ContextNamespace "DataAccessLayer.Context"
Run Code Online (Sandbox Code Playgroud)
  1. 请注意,指定的路径是绝对路径
  2. 我知道文档说路径是相对于项目的。但它并不禁止放置绝对路径。
  3. -Namespace 和 -ContextNamespace 是可选的,但我使用它们来保持命名空间与类位置同步。