如何在Entity Framework Core中删除生成的模型类

5
我们正在使用EF Core,并遵循数据库优先的方法。
我们使用更新我们的上下文文件。现在,我们正在进行清理工作,目前我们的数据库中有一些表已被删除,当我们运行来对数据库进行更新时,我的上下文文件会被更新,删除所有已删除表(模型类)的引用。
但是在Model文件夹下,我们仍然可以看到我们已删除的表模型类文件存在。
请问如何自动删除这些文件,而不是手动删除?

有进展了吗?我也遇到了同样的问题,不知道为什么。 - Ataa Aub
3个回答

4
我使用此命令将类生成到文件夹中,然后重新命名文件夹以达到所需的结果。
Scaffold-DbContext name=DefaultConnection Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities -ContextDir Contexts -Namespace "yournamespace" -f
  • "-OutputDir Entities"会在"Entities"文件夹中创建类。
  • "-ContextDir Contexts"会在"Contexts"文件夹中创建dbcontext文件。

要删除/清理:

  • 在命令中将目录名称修改为"newfolder",然后运行。
  • 删除旧文件夹并将新文件夹重命名为原始名称。

不对。你可以在命令中添加-Namespace "yournamespace"。请检查上面的整个命令。 - undefined
是的,谢谢,运行正常。 - undefined

1

Scaffold-DbContext不支持自动删除未使用的类(对应于重命名或删除的表的类)。您需要以其他方式删除这些文件。在Windows上,您可以在成功脚手架后运行此命令来自动化该过程。

PowerShell -Command "& {Get-ChildItem -path "Model" | where {$_.LastWriteTime -lt (date).AddMinutes(-1)} | Remove-Item}"
工作原理: Scaffold-DbContext重新生成所有文件,因此即使其内容保持不变,它们的日期/时间也会更改。孤立的文件将保留旧的日期/时间。该命令使用PowerShell删除早于一分钟的文件。这已经足够好了,因为通常情况下你不会在一分钟内运行脚手架,并且通常搭建需要少于一分钟。在其他操作系统上使用类似的shell命令。 重要提示: 生成的文件必须在子目录中(Model在这种情况下),并且该子目录中不能有其他文件,否则它们将被删除! 完整示例: 我最终在Windows上使用了一个名为Update from database.cmd的脚本:
@echo off
rem Change current directory to the one containing this script.
cd /D "%~dp0"

rem Restore local command "dotnet ef". Init local commands before that. See .config\dotnet-tools.json.
dotnet tool restore

rem Generate files in a subdirectory called "Model".
dotnet ef dbcontext scaffold "Data Source=...;Database=..." Microsoft.EntityFrameworkCore.SqlServer --output-dir Model --force --context MyDbContext

rem Don't run cleanup if build failed or else all generated files will be deleted!
if %errorlevel% neq 0 goto end

rem Cleanup: delete orphaned files from "Model" subdirectory.
PowerShell -Command "& {Get-ChildItem -path "Model" | where {$_.LastWriteTime -lt (date).AddMinutes(-1)} | Remove-Item}"

:end
rem Inspect console output.
pause

0

从技术上讲,您可以删除该文件夹中的所有类文件,包括DataContext,并使用dotnet ef dbcontext scaffold ...命令重新生成它们。


5
无法这样做,因为删除文件会破坏构建,而当项目无法构建时,脚手架也会失败。 - idilov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接