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

EF 6.2外键约束问题:SQLite主键与外键类型不匹配报错13101

解决EF 6.2与SQLite 3类型不匹配的13101错误问题

Hey Doug, 这个问题我之前帮好几个开发者踩过坑,核心就是SQLite的动态类型系统和EF 6.2的严格映射逻辑之间的冲突。

问题根源

SQLite本身是无类型的,但EF 6.2对SQLite的类型映射是“字面匹配”的——它会把INTEGER和int(SQLite里int其实是INT的别名,但EF不认这个等价关系)判定为两种不同的类型,所以当Test表的外键TestTypeId是int,而TestTypes表的主键TestTypeID是INTEGER时,EF就会抛出13101错误,认为类型不匹配。

最优解决方案:统一用INTEGER类型

直接把所有主键和外键都改成INTEGER就对了,原因有两个:

  • SQLite里**INTEGER类型的主键默认自带自增特性**,根本不需要加AUTO_INCREMENT关键字——只要你把字段设为主键,SQLite会自动关联rowid实现自增,完全满足你从SQL Express迁移过来的自增主键需求。
  • 统一类型后,EF 6.2会正确识别主键和外键的类型匹配,13101错误自然消失。

为什么不推荐改成带AUTO_INCREMENT的int?

因为SQLite的AUTO_INCREMENT关键字只能用于INTEGER类型的主键,给int类型加这个关键字是无效的,EF依然会识别类型不匹配,等于白忙活一场。

额外验证步骤

修改完数据库结构后,可以做这两步确保没问题:

  1. 用SQL命令查看表结构:
    PRAGMA table_info(Test);
    PRAGMA table_info(TestTypes);
    
    确认TestTypeId和TestTypeID的类型都是INTEGER。
  2. 检查EF模型:确保对应的.NET属性类型都是int,更新EDMX或者Code First的映射配置,让EF同步识别新的类型。

这样处理后,你的EF 6.2就能正常和SQLite数据库交互啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:46:24