Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 使用数据库优先方法时如何更新模型_Asp.net Core_Entity Framework Core - Fatal编程技术网

Asp.net core 使用数据库优先方法时如何更新模型

Asp.net core 使用数据库优先方法时如何更新模型,asp.net-core,entity-framework-core,Asp.net Core,Entity Framework Core,我首先使用EntityFramework核心数据库创建模型 但我不知道在编辑数据库后如何更新模型。您可以通过运行最初运行的命令来重新构建模型,并添加了-Force选项。这将导致指定文件夹的内容被重写。使用Package Manager控制台,修改后的命令变为: Scaffold-DbContext "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.Sq

我首先使用EntityFramework核心数据库创建模型


但我不知道在编辑数据库后如何更新模型。

您可以通过运行最初运行的命令来重新构建模型,并添加了
-Force
选项。这将导致指定文件夹的内容被重写。使用Package Manager控制台,修改后的命令变为:

Scaffold-DbContext "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force
或者,如果您正在使用,它将变为:

dotnet ef dbcontext scaffold "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -f

但是,您应该考虑使用迁移来将模型和数据库模式保持同步。这样,您可以对模型进行更改,然后将其传播到数据库

打开您的ContextModel.edmx文件以显示模型图。在设计图面上的任意位置单击鼠标右键,然后选择“从数据库更新模型”。。 在更新向导中,选择刷新选项卡并选择您的表格,然后单击完成按钮

有关图片的更多详细信息,请访问:

附加提示 如果您要不时更新模型,这里有一个简化过程的方便方法

前往菜单工具外部工具,然后添加新菜单并填写以下条目:


标题

Update DbContext
dotnet.exe
命令

Update DbContext
dotnet.exe
参数

$(ProjectDir)
ef dbcontext scaffold“您的连接字符串”Microsoft.EntityFrameworkCore.SqlServer--output dir=Models--force
初始目录

$(ProjectDir)

然后选择勾选“使用输出窗口”,点击ApplyOK


当您再次转到工具时,只需点击一个按钮,这个新菜单就会出现并准备好重新使用

如果我们在
dbcontext
中进行自定义,例如添加
LoggerFactory
,然后在使用
之后('Scaffold-dbcontext“Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;“Microsoft.EntityFrameworkCore.SqlServer-OutputDir Models-Force”)
。然后,此命令将丢失所有自定义更改。

您需要执行迁移,请勿重新填充,否则您将丢失对模型所做的任何工作,例如数据验证。

使用在应用程序级别的迁移文件夹中创建的命令添加迁移NameOfMigrationfile

如果未启用自动迁移,那么我们可以在PackageManager控制台中使用以下一些命令

PM>启用迁移-强制(如果未启用自动迁移) PM>添加迁移迁移名称
PM>更新数据库-force(如果add migration命令不起作用,那么我们可以使用udate命令)

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给出的答案。

您可以使用此扩展:
,它将使您的生活更加轻松,并且您不必编写任何命令行。

它被称为实体框架核心1.0这对我不起作用,显示错误“scaffold DbContext”未找到。请帮助如果您收到错误,说明术语“scaffold DbContext”未被识别为cmdlet的名称,然后关闭并重新打开Visual Studio。要知道需要在“”中为连接字符串添加什么内容,此视频非常有帮助-->您可以使用软件包管理器控制台
-Tables
参数()指定要构建的表:
-Tables Products
,或者如果您正在使用CLI,则参数为
-table
(单数)@SagarPatil您不能。这不是一个受支持的方案。您需要重新编译应用程序以使对模型的任何更改生效。这仅在EF6及更低版本之前是可能的,而不是要求的核心变量。您应该删除此答案以恢复您的代表:)问题是EF核心而不是EF。谢谢,这非常有用。创建的DbContext类是一个分部类。您可以创建一个单独的文件,并从那里对类进行增强。是的,对我来说,我必须执行DTO,以避免模型中不完整的验证。如果您只是执行迁移,您将覆盖数据库更改,这些更改是由DBA完成的,而不是首先由代码完成的&您需要准备好简历。如果必须利用迁移,则必须注释掉迁移将针对数据库运行的所有更改,并确保已正确手动更新所有POCO类和实体以匹配数据库。按照Yom S.说的做可能是最简单的。此外,今后不要像SOLID的“O”中所描述的那样向实体POCO类添加代码。为继承打开为更新关闭我认为我们根本不应该写入生成的代码。如果我们这样做,就会出问题。问题是关于数据库优先的方法,那么迁移在这里不适用。迁移是模型优先的方法。