【发布时间】:2016-12-08 23:02:33
【问题描述】:
我首先使用EntityFramework Core数据库创建模型as illustrated in the EF Core documentation
但我不知道如何在编辑数据库后更新模型。
【问题讨论】:
-
它叫Entity Framework Core 1.0
标签: asp.net-core entity-framework-core
我首先使用EntityFramework Core数据库创建模型as illustrated in the EF Core documentation
但我不知道如何在编辑数据库后更新模型。
【问题讨论】:
标签: asp.net-core entity-framework-core
您可以通过运行最初添加了-Force 选项的命令来重新构建模型。这将导致指定文件夹的内容被覆盖。使用包管理器控制台example from the EF Core docs,修改后的命令变为:
Scaffold-DbContext "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force
或者,如果您使用CLI commands,则变为:
dotnet ef dbcontext scaffold "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -f
但是,您应该考虑使用迁移来保持模型和数据库架构彼此同步。这样您就可以对模型进行更改,然后将它们传播到数据库。
【讨论】:
-Tables 参数(learnentityframeworkcore.com/migrations/commands/…) 来指定要搭建的表:-Tables Products,或者如果您使用的是CLI,则参数是@ 987654331@(单数)learnentityframeworkcore.com/migrations/commands/…
如果您要不时更新模型,这里有一种简化流程的便捷方法。
转到菜单工具 > 外部工具,然后添加一个新菜单并填写以下条目:
标题:
Update DbContext
命令:
dotnet.exe
参数:
ef dbcontext scaffold "your-connection-string" Microsoft.EntityFrameworkCore.SqlServer --output-dir=Models --force
初始目录:
$(ProjectDir)
然后选择勾选“使用输出窗口”,点击Apply和OK。
当您再次转到工具时,这个新菜单应该会出现并准备好重复使用,只需单击一个按钮!
【讨论】:
您需要进行迁移,请勿重新搭建脚手架,否则您将丢失在模型上完成的任何工作,例如数据验证。
【讨论】:
如果我们在dbcontext 类中自定义例如 添加LoggerFactory,然后在我们使用('Scaffold-DbContext "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force') 之后。此命令则所有自定义更改都将丢失。
【讨论】:
使用命令 Add-migration NameOfMigrationfile 在应用程序级别的迁移文件夹中创建。
如果未启用自动迁移,那么我们可以在包管理器控制台中使用以下一些命令。
PM > Enable-migrations -force(如果未启用自动迁移) PM > 添加-迁移迁移名称 PM > Update-database -force(如果 add-migration 命令不起作用,我们可以使用 udate 命令)
【讨论】:
Mike 给出的解决方案对我来说没有问题。根据 Mike 的回答,这里有一些详细的回答。
Scaffold-DbContext "Server={{Server name}};Database={{Database name}};User ID={{Login}};password={{Password}}" Microsoft.EntityFrameworkCore.SqlServer -OutputDir {{Folder name}} -Force
样本
Scaffold-DbContext "Server=.;Database=EmployeeDB;User ID=sa;password=12345" Microsoft.EntityFrameworkCore.SqlServer -OutputDir "./EmployeeDBModel" -Force
如果您没有使用 SQL Server 身份验证,请参考 Mike 给出的答案。
【讨论】:
您可以使用此扩展程序:EF Core Power Tools ,它会让你的生活更轻松,而且你不必编写任何命令行。
【讨论】:
对于那些喜欢将所有内容保留在同一个 DbContext 类中的人,请使用带有选项 -Context 的 Scaffold-DbContext。
示例:
Scaffold-DbContext "Server=server;Database=mydb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -f -Context MyDbContext
为 MyDbContext 生成的代码将被放置在一个新的部分类文件中,因此不会丢失任何代码。
【讨论】:
打开您的 ContextModel.edmx 文件以显示模型图。右键单击设计图面上的任意位置,然后选择Update Model from Database..。 在更新向导中,选择刷新标签并选择您的表格,然后单击完成按钮。
更多图片详情请访问:EF Database First with ASP.NET MVC: Changing the Database
【讨论】: