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

时间:2018-01-16 13:19:28

标签: c# entity-framework-core

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

我使用Scaffold-DbContext将我的Backend Project设置为模型类目标的默认项目,但DbContext Class始终与模型类在同一文件夹中创建。是否可以将DbContext类的创建重定向到另一个输出文件夹,在我的情况下是DbContexts项目?

6 个答案:

答案 0 :(得分:3)

是的,您可以使用我的“EF Core Power Tools”免费的Visual Studio扩展程序:

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

答案 1 :(得分:3)

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

  

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

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

Scaffold-DbContext "*connection*" "*provider*" -OutputDir "BackendProject" -ContextDir "DbContexts"

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

答案 2 :(得分:3)

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

Scaffold-DbContext "Server=[Server];Database=[Database Name];Trsted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Project "[Project Name]" -Force 

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

如最佳答案所示,如果您要在该项目中使用其他文件夹,则只需使用-OutputDir选项。

答案 3 :(得分:0)

简答:不。

目前,输出文件夹将包含模型和上下文,并且也无法更改其命名空间。

您可以查看here以获取支持的参数。

答案 4 :(得分:0)

您需要将默认项目更改为要在其中生成实体的项目,还要指定要在其中生成模型定义的文件夹(使用OutputDir开关)。示例如下

Scaffold-DbContext“数据源=。\ SQLEXPRESS;初始目录= DbName;集成安全性= SSPI;” Microsoft.EntityFrameworkCore.SqlServer- OutputDir 模型 -f -d

答案 5 :(得分:0)

您可以像这样在不同的项目(不仅是同一项目的不同文件夹)中生成模型和 DBContext :

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