You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手开发者求助:.NET EF Core Sqlite(SSMS)项目迁移配置问题

问题分析与解决方案

操作中的核心问题

  • 迁移历史与现有数据库不同步:从BAK还原数据库后,数据库内的__EFMigrationsHistory表记录了原项目的迁移历史,但本地项目的迁移文件未与该历史对齐。EF Core会默认认为当前数据库未应用任何迁移,因此每次新迁移都会尝试重新创建所有已存在的表。
  • 未初始化现有数据库的迁移基线:连接到已存在的数据库时,没有先让EF Core识别现有表结构,直接修改模型后创建迁移,导致迁移文件包含了创建已有表的语句。
  • 不必要的迁移触发:视图模型(ViewModels)不属于EF Core的映射范围,修改视图模型不需要生成迁移。你将视图模型修改纳入迁移流程,会生成无意义的迁移文件,增加出错概率。
  • 手动修改迁移的错误循环:每次手动删除迁移文件中的建表语句只是临时解决,没有从根源同步迁移历史,导致后续每次新迁移都基于错误基线重复触发相同问题。

修复步骤

  1. 同步迁移历史
    查看数据库中__EFMigrationsHistory表的最后一条迁移名称,在本地项目中执行:

    Add-Migration <最后一条迁移的名称> -IgnoreChanges
    

    该命令会创建一个空迁移文件,仅用于同步EF Core的迁移历史,不会生成任何数据库修改语句。执行完成后运行:

    Update-Database
    

    此时EF Core会将该迁移标记为已应用,与数据库历史完全对齐。

  2. 建立正确的迁移基线(首次连接现有数据库时)
    如果是第一次连接这个还原的数据库,先执行:

    Add-Migration InitialCreate -IgnoreChanges
    

    该迁移会基于当前数据库结构生成空的初始迁移,用于告诉EF Core“现有表结构就是初始状态”。随后执行Update-Database完成历史同步。

  3. 规范迁移触发条件
    只有修改领域模型(Entity类)或DbContext中的映射配置时,才需要执行Add-Migration和Update-Database。视图模型的修改无需触发迁移,直接跳过相关步骤。

  4. 停止手动修改迁移文件
    同步迁移历史后,后续正常修改领域模型生成的迁移文件会只包含变更内容(如新增列、修改字段类型等),无需手动编辑即可成功执行Update-Database。

内容的提问来源于stack exchange,提问作者Morgan Bradford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:50:22