【问题标题】:Migrations in .net core with EF使用 EF 迁移 .net 核心
【发布时间】:2017-06-21 07:25:10
【问题描述】:

我正在学习 .net 核心并尝试找出迁移的最佳实践。我来自 Django,当我对数据库进行更改时,我会这样做:

首先:
makemigrations 负责根据您对模型所做的更改创建新的迁移。

然后:
migrate 负责应用迁移。

现在我尝试将其转换为 .NET Core 并查看包管理器控制台中的迁移命令。我假设等价于运行:

首先:
Add-Migration -Name <myMigration> 添加一个新的迁移。

然后:
Update-Database -Migration <myMigration> 将数据库更新到指定的迁移。

然后我得到:
There is already an object named '<modelName>' in the database.

我认为 Add-Migration 不仅将更改添加到我在 Models 文件夹中所做的数据库中,而且似乎想要添加 Models 文件夹中的所有内容。那么我在这里错过了什么?如何进行仅将唯一更改应用于数据库的迁移?

【问题讨论】:

  • 您可能已经创建了此表。仅当您从头开始迁移时,当那里没有现有表时,迁移才有效。然后首先迁移创建所有表,然后以下迁移对其进行更新。迁移文件始终作为 Migration 文件夹中 快照 文件的差异生成,不是来自实际数据库!如果过去所有人都这样做,那么可能会有一个__EfMigrationsHistory 表或类似的东西。此表包含一个条目列表,例如 20170621093328_Init。它告诉已经应用了哪些迁移
  • 当您应用迁移时,可能会发生类似您的错误,然后删除 2017xxxxxxxxxxx_SomeName.cs 文件而不执行 Update-Database -Migration <previous_migraton_here>,然后运行 ​​Remove-Migration然后 创建新的迁移。这很容易搞砸,特别是如果您无法清除数据库并轻松重新植入它并且不使用允许您回滚到特定快照的版本控制系统。如果您想更新到最新版本,也不需要使用-Migration 调用Update-Database。仅用于回滚或应用不是最新的要求
  • @Tseng 我可以轻松擦除我的数据库,但我该怎么做呢?我会用Remove-Migration -Name <migrationName> 删除所有迁移,然后运行Drop-Database,然后转到Add-Migration -Name Initial 吗?之后,Add-Migration 会按预期工作吗?
  • 是的,类似的东西。您当然可以删除数据库并删除整个Migrations 文件夹以从头开始。只要您从不手动删除迁移文件并且从不手动编辑快照文件,这应该可以工作

标签: asp.net-mvc entity-framework asp.net-core


【解决方案1】:

您的项目正在查看一个已经存在的数据库。您可能需要更改您指向的数据库上的连接字符串/设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2017-11-29
    • 2020-02-15
    • 1970-01-01
    • 2018-05-21
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多