【问题标题】:How to update models in VS 2019 from database in Entity Framework in ASP.NET Core如何从 ASP.NET Core 实体框架中的数据库更新 VS 2019 中的模型
【发布时间】:2020-04-15 21:35:41
【问题描述】:

到 VS 2019,我创建了一个 API 项目(首先是数据库),一切都运行良好,现在我在数据库中进行了一些更改,例如添加新表和一些属性以及修改其他人的数据类型等等..,问题是如何更新模型以匹配 SQL 中的数据库?

这是我的项目的截图:

【问题讨论】:

标签: sql-server api sql-update visual-studio-2019


【解决方案1】:

尝试通过带有“Force”参数的 Scaffold-DbContext 重新创建您的模型。

Scaffold-DbContext "Data Source=yoursource;Initial Catalog=yourdb;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Force

【讨论】:

  • 如果您想扩展您的 dbContext 类,而不是创建另一个 DbContext 类,请使用选项 -Context。生成的代码将放在一个单独的部分类文件中。
【解决方案2】:

来自文档:

https://docs.microsoft.com/en-us/ef/ef6/modeling/designer/workflows/database-first

第一步是对数据库架构进行一些更改。我们将向架构中添加一个用户表。

  • 在服务器资源管理器中右键单击数据库并选择新建查询
  • 将以下 SQL 复制到新查询中,然后右键单击该查询并选择 执行
CREATE TABLE [dbo].[Users]
(
    [Username] NVARCHAR(50) NOT NULL PRIMARY KEY,  
    [DisplayName] NVARCHAR(MAX) NULL
)

现在架构已更新,是时候使用这些更改更新模型了。

  • 在 EF 设计器中右键单击模型的空白处并选择“从数据库更新模型...”,这将启动更新向导
  • 在更新向导的添加选项卡上,选中表旁边的框,这表明我们要从架构中添加任何新表。 刷新选项卡显示模型中的所有现有表,这些表将在更新期间检查更改。删除选项卡显示已从模式中删除的所有表,并且也将作为更新的一部分从模型中删除。这两个选项卡上的信息是自动检测的,仅供参考,您不能更改任何设置。

  • 单击更新向导上的完成

     

模型现在更新为包含一个新的用户实体,该实体映射到我们添加到数据库中的用户表。

【讨论】:

  • 非常感谢您的支持,现在我更新了SQL中的数据,但是在我的模型中VSRight-click on an empty spot of your model in the EF Designer and select ‘Update Model from Database…’, this will launch the Update Wizard...这一步的问题(在我附加的img中)怎么做?
  • 在 vs2019 中? ado.net edmx 的对象类型不可用。
  • 嗨考虑到给定的问题是针对 EF Core 的,您提供的答案适合 EF 6
【解决方案3】:
Hi I am Considering you are using EFCore, please confirm !! 
As per available information over internet 
EF core for DB first ( from db to EF ) approach to Modify new/existing entity 

您需要按照以下步骤操作:

  1. EF 模型需要运行带有标志 Force 的 Scaffold

EF 模型需要使用 Force 标志运行 Scaffold,这将删除所有 您在模型中的本地更改 (对我来说是 IdentityDBContext 并覆盖 identityUser 更改)


  1. 运行所有模型迁移后

  2. 运行所有迁移将使所有内容同步 bw EF 和 DB


现在您需要再次对解决方案进行本地更改 (对我来说更新 IdentityDBContext 并覆盖 identityUser 更改 恢复到数据库更改之前的状态)


  1. 也按照下面的回答,请注意 EDMX 对象尚不可用, 谁有任何线索,请在这里分享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2011-04-28
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多