如何更新由Scaffold-DbContext生成的现有模型类

13
使用ASP.NET CORE EF工作时,我使用以下命令从现有数据库生成了模型类:
Scaffold-DbContext "Server=myserver\mydb;Database=mydb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

现在我的数据库已经改变,例如我在表格AppUser中新增了一列。我不想使用迁移来保持模型与数据库同步。
我已经对数据库进行了更改,现在我想从当前数据库状态更新我的现有模型类。请问有什么建议吗?
我应该删除现有的模型类并使用相同的命令Scaffold-DbContext重新生成,还是有其他方法可以使现有的模型类反映新的更改。

1
是的。通常情况下,每当您更改数据库时,只需重新运行“Scaffold-DbContext”即可。因此,您不应直接修改任何生成的实体类。 - Chris Pratt
谢谢@ChrisPratt,同样的命令完成了任务,只是加了额外的参数“-f”,就像Julian的回答中提到的那样。 - M_Idrees
2个回答

14
你是否在寻找类似于这个的内容?
据我所知,要更新模型,必须执行相同的命令以覆盖更改,但需要加上其他标志。
我记得使用-f(强制)选项来覆盖更改:
Scaffold-DbContext "Server=myserver\mydb;Database=mydb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -f

虽然您也可以指定要更新的实体(表):

Scaffold-DbContext "Server=myserver\mydb;Database=mydb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -t <table> -f

3
谢谢@Julian,第一个命令完成了任务。第二个命令也可以工作,但不是我期望的那样。虽然它为一个表生成了模型类,但它也覆盖了我的DbContext类,其中包含了只针对一个特定表的DbSet<T>属性。它删除了其他表的剩余属性。 - M_Idrees

0

Scaffold-DbContext可以与选项-Context一起使用,以扩展当前的DbContext文件,而不是创建一个新文件。

例如:

Scaffold-DbContext "Server=server;Database=mydb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -f -Context MyDbContext

MyDbContext 的生成代码将放置在一个部分类文件中。


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