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

     2023-03-29     17

关键词:

【中文标题】使用数据库优先方法时如何更新模型【英文标题】:How to update the model when using database first approach 【发布时间】:2016-12-08 23:02:33 【问题描述】:

我首先使用EntityFramework Core数据库创建模型as illustrated in the EF Core documentation

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

【问题讨论】:

它叫Entity Framework Core 1.0 【参考方案1】:

您可以通过运行最初添加了-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

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

【讨论】:

这对我不起作用显示错误 "scaffold-DbContext" not found like that.Help plz 如果您收到一条错误消息,指出“Scaffold-DbContext”一词未被识别为 cmdlet 的名称,请关闭并重新打开 Visual Studio。 要知道你需要在 "" 中为你的连接字符串添加什么,这个视频真的很有帮助 --> VIDEO 您可以使用包管理器控制台-Tables 参数(learnentityframeworkcore.com/migrations/commands/…) 来指定要搭建的表:-Tables Products,或者如果您使用的是CLI,则参数是@ 987654331@(单数)learnentityframeworkcore.com/migrations/commands/… @SagarPatil 你不能。这不是受支持的方案。您需要重新编译应用程序才能使模型的任何更改生效。【参考方案2】:

附加提示

如果您要不时更新模型,这里有一种简化流程的便捷方法。

转到菜单工具 > 外部工具,然后添加一个新菜单并填写以下条目:


标题

Update DbContext

命令

dotnet.exe

参数

ef dbcontext scaffold "your-connection-string" Microsoft.EntityFrameworkCore.SqlServer --output-dir=Models --force

初始目录

$(ProjectDir)

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

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

【讨论】:

谢谢,这很有用。【参考方案3】:

您需要进行迁移,请勿重新搭建脚手架,否则您将丢失在模型上完成的任何工作,例如数据验证。

【讨论】:

是的,对我来说,我不得不做 DTO 只是为了避免在我的模型中进行验证 那不完整。如果您只是执行迁移,您将覆盖由您的 DBA 而不是首先通过代码完成的数据库更改,您需要准备好您的简历。如果您必须使用迁移,则必须注释掉迁移将对数据库运行的所有更改,并确保您已正确手动更新所有 POCO 类和实体以匹配数据库。正如 Yom S. 所说,它可能最简单。此外,将来不要按照 SOLID 的“O”中所述向您的实体 POCO 类添加代码。开放继承 封闭更新 我认为我们根本不应该写入生成的代码。如果我们这样做,就会有问题。 问题是关于数据库优先的方法,然后迁移在这里不适用。迁移是模型优先的方法。【参考方案4】:

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

【讨论】:

创建的 DbContext 类是分部类。您可以创建一个单独的文件并从那里对课程进行改进。【参考方案5】:

使用命令 Add-migration NameOfMigrationfile 在应用程序级别的迁移文件夹中创建。

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

PM > Enable-migrations -force(如果未启用自动迁移) PM > 添加-迁移迁移名称 PM > Update-database -force(如果 add-migration 命令不起作用,我们可以使用 udate 命令)

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

您可以使用此扩展程序:EF Core Power Tools ,它会让你的生活更轻松,而且你不必编写任何命令行。

【讨论】:

扩展无法与最新的 EF 核心一起工作...但看起来真的很好。 @Iannick 直到今天,我每天都在使用最新版本的 VS2022 和 EF6,它运行良好;如果您有任何问题,您可能需要在这里查看github.com/ErikEJ/EFCorePowerTools/wiki【参考方案8】:

对于那些喜欢将所有内容保留在同一个 DbContext 类中的人,请使用带有选项 -Context 的 Scaffold-DbContext。

示例:

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

为 MyDbContext 生成的代码将被放置在一个新的部分类文件中,因此不会丢失任何代码。

【讨论】:

【参考方案9】:

打开您的 ContextModel.edmx 文件以显示模型图。右键单击设计图面上的任意位置,然后选择Update Model from Database..。 在更新向导中,选择刷新标签并选择您的表格,然后单击完成按钮。

更多图片详情请访问:EF Database First with ASP.NET MVC: Changing the Database

【讨论】:

这只能在 EF6 及更低版本之前实现 - 而不是核心变体,根据要求。 问题是针对 EF Core 而不是 EF

GraphQL Schema 未使用 NestJS 更新(代码优先方法)

】GraphQLSchema未使用NestJS更新(代码优先方法)【英文标题】:GraphQLSchemanotupdatedwithNestJS(code-firstapproach)【发布时间】:2020-08-1714:11:18【问题描述】:GraphQL新手,我在使用最新版本的NestJS时遇到问题,我目前正在尝试向解析器添... 查看详情

更新 UITableView 使用的数据模型数组的正确方法 [关闭]

】更新UITableView使用的数据模型数组的正确方法[关闭]【英文标题】:Theproperwaytoupdatedata-modelarrayusedbyUITableView[closed]【发布时间】:2017-05-2511:36:14【问题描述】:我猜我们应该倾向于为UITableView使用的数据模型数组使用不可变数组... 查看详情

如何使用 DbModelBuilder 和数据库优先方法来实现软删除

】如何使用DbModelBuilder和数据库优先方法来实现软删除【英文标题】:HowtouseDbModelBuilderwithDatabaseFirstApproachtoimplementSoftDelete【发布时间】:2016-02-2021:28:30【问题描述】:我正在尝试在我们的EF6项目中实现软删除。我们使用的是数... 查看详情

刷新在实体框架中使用数据库优先方法模型创建的实体中的数据

】刷新在实体框架中使用数据库优先方法模型创建的实体中的数据【英文标题】:Refreshthedatainentitycreatedusingdatabase-firstapproachmodelinEntityFramework【发布时间】:2019-07-2418:39:03【问题描述】:using(DEMONewEntitiesdemonew=newDEMONewEntities())在A... 查看详情

当我在另一个视图中使用 CoreData 保存新数据时如何更新模型的另一个实例

】当我在另一个视图中使用CoreData保存新数据时如何更新模型的另一个实例【英文标题】:HowtoupdateanotherinstanceofamodelwhenIsavenewdatausingCoreDatainanotherview【发布时间】:2021-01-1918:55:16【问题描述】:我正在构建一个简单的QuiziOS应用... 查看详情

如何在更新 Laravel 中的记录时将表单发布数据加载到模型中

...【发布时间】:2016-04-0723:46:56【问题描述】:我正在尝试使用表单中的发布数据更新记录。每次我手动将表单中的值分配给模型并保存记录时。$model=CondoFacilities::find($id);$model-> 查看详情

代码优先更新数据库错误“ApplicationDbContext”上下文已更改

】代码优先更新数据库错误“ApplicationDbContext”上下文已更改【英文标题】:CodeFirstUpdateDatabaseError\'ApplicationDbContext\'contexthaschanged【发布时间】:2021-03-3117:00:43【问题描述】:我将MVC5和EF6与CodeFirst一起使用。每次我尝试登录时都... 查看详情

EF 4.1 模型中的图像数据类型优先

...【发布时间】:2011-06-2710:11:01【问题描述】:我们有一个使用实体框架4.0的项目。我们绘制模型,然后生成SQLCompact3.5DB。由于我们需要一个大型BLOB存储,我们创建了一个具有Image数据类型的列(因为Binary限制为8000字节)。但是... 查看详情

ef工作流程

...类,默认约定和配置构建概念模型。存储模型:EF为底层数据库架构构建存储模型。在代码优先方法中,根据概念模型进行推断来构建。在数据库优先模式中,根据目标数据库进行推断来构建。映射:EF包括的映射信息,表示概... 查看详情

使用代码优先模型的 Kendo 网格绑定

】使用代码优先模型的Kendo网格绑定【英文标题】:Kendogridbindingwithcode-firstmodel【发布时间】:2013-04-0216:31:05【问题描述】:为什么当我的实体包含非空ICollection属性时,剑道网格不显示数据?当我使用具有外键关系的代码优先模... 查看详情

如何禁用代码优先迁移

...:我在EF5中有一个代码优先的实体模型。但我想手动管理数据库更改——我不希望EF修改我现有的数据库及其所有数据。但是当我在EF映射和数据库中进行并行更改时,EF拒绝正常运行,告诉我需要先使用代码迁移。如何关闭此功... 查看详情

如何使用 ajax POST 方法将日历值更新到数据库?

】如何使用ajaxPOST方法将日历值更新到数据库?【英文标题】:HowcanImakemycalendarvalueupdatetomydatabasewithmyajaxPOSTmethod?【发布时间】:2017-04-2603:02:44【问题描述】:我试图让它在单击我的图像时打开一个日历,当在日历上选择日期时... 查看详情

C# 代码优先迁移,向上/向下?

...方法的目的是删除所有依赖项并删除表(如果它们已经在数据库中)?另外,down方法会在up方法之前执行吗?up方法则相反,创建/更新表/索引等?有时当我使用它时 查看详情

有人知道在使用 impala 时如何选择数据模型吗?

】有人知道在使用impala时如何选择数据模型吗?【英文标题】:Doesanybodyknowhowtochoosethedatamodelwhenusingimpala?【发布时间】:2015-01-1815:31:53【问题描述】:有几种文件格式,如impala内部表或外部表格式,如csv、parquet、hbase。现在我们... 查看详情

强制核心数据更新模型

...于核心数据的应用程序,用户可以使用Dropbox备份和恢复数据库。现在我已经更改了模型(新版本),为现有实体添加了几个属性并实现了轻量级迁移。迁移工作正常,我的问题是当我恢复使用以前模型创建的数据库时。如果我... 查看详情

在 Django 中使用 natural_keys 时,如何区分创建和更新?

...:01:00【问题描述】:在Django中,我经常将模型装置从一个数据库复制到另一个数据库。我的模型在序列化过程中使用natural_keys(尽管我不确定这是否相关) 查看详情

如何使用单个 ExtJS 模型从数据库中保存、加载和删除?

】如何使用单个ExtJS模型从数据库中保存、加载和删除?【英文标题】:Howtosave,loadanddeletefromdatabaseusingasingleExtJSmodel?【发布时间】:2021-03-2518:13:13【问题描述】:使用ExtJS6可以将存储绑定到模型并使用方法sync保存或使用load加载... 查看详情

Nodejs / PostgreSQL sequelize - 如何更新/更改数据库中的模型?

】Nodejs/PostgreSQLsequelize-如何更新/更改数据库中的模型?【英文标题】:Nodejs/PostgreSQLsequelize-Howtoupdate/changeamodelinthedatabase?【发布时间】:2017-04-2822:08:45【问题描述】:我使用sequelize创建了一个模型(代码如下),但不明白如何更... 查看详情