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

C# LINQ操作SQLite数据库:保存与迁移报错求助

问题分析与解决方案

错误原因解析

1. 表"Customers"已存在的原因

  • 你大概率在之前的操作中已经创建过该表:要么是手动通过SQL工具建的,要么是EF Core用EnsureCreated()方法自动生成的(这个方法不会和迁移系统交互),也可能是早期迁移执行后你删除了Migrations文件夹里的记录,但数据库里的表和__EFMigrationsHistory(EF存储迁移记录的系统表)还保留着,导致后续迁移执行时认为表未创建,重复执行建表语句引发冲突。

2. FirstName列找不到的原因

  • 你的Model.cs里确实有FirstName字段,但数据库中的Customers表是旧版本(没有这个列),迁移记录没有同步更新到数据库,所以调用SaveChanges()时ORM框架找不到对应列报错。你看到的Model是最新的,但实际数据库结构没跟上。

可行解决办法

办法一:删除数据库重建(开发阶段首选)

  • 找到项目中的SQLite数据库文件(通常是.db/.sqlite后缀),直接删除。
  • 重新生成迁移并更新数据库:
    dotnet ef migrations add InitialCreate
    dotnet ef database update
    
  • 重新运行程序,SaveChanges()就能正常执行了。

办法二:手动更新现有表(需保留数据时用)

  • 用SQLite可视化工具(比如DB Browser for SQLite)连接到你的数据库,执行SQL语句添加列:
    ALTER TABLE Customers ADD COLUMN FirstName TEXT;
    
    注意:字段类型要和Model里的定义匹配,比如字符串用TEXT,整数用INTEGER,布尔值用INTEGER(1)等。
  • 之后同步迁移记录:
    dotnet ef migrations add AddFirstNameColumn
    dotnet ef database update
    

办法三:修复迁移记录(适合熟悉EF迁移的场景)

  • 删除Migrations文件夹下的所有文件,清空迁移历史。
  • 删除数据库中的__EFMigrationsHistory表(这是EF用来跟踪迁移的系统表)。
  • 重新生成初始迁移并更新:
    dotnet ef migrations add InitialCreate
    dotnet ef database update
    

后续避坑提醒

  • 开发时全程用EF迁移管理数据库结构,别手动修改数据库表,避免Model、迁移记录、数据库三者结构不一致。
  • 不要同时使用EnsureCreated()和迁移系统,前者会绕开迁移直接建表,必然导致后续迁移冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:35:05