为何为旧表添加主键后Linq/Linqpad仍不识别该主键?
解决LinqPad无法识别新增主键的问题
这种情况我碰到过好几次,LinqPad的元数据缓存有时候会跟不上数据库结构的变化,别着急,按下面几步来就能解决:
刷新数据库连接的架构缓存
LinqPad会默认缓存数据库的表结构信息,当你手动修改了数据库表的主键后,它不会自动感知到。你需要手动刷新:- 在左侧的连接面板里找到对应的数据库连接
- 右键点击它,选择
Refresh Schema选项 - 等待刷新完成后,再尝试执行增删改操作
验证主键在数据库中的实际状态
有时候可能误以为主键设置成功,但实际数据库里并没有生效。你可以在LinqPad里执行以下查询来验证(替换成你的表名和列名):SELECT COLUMN_NAME, IS_NULLABLE, COLUMNPROPERTY(OBJECT_ID('YourTableName'), COLUMN_NAME, 'IsIdentity') AS IsIdentity, COLUMNPROPERTY(OBJECT_ID('YourTableName'), COLUMN_NAME, 'IsPrimaryKey') AS IsPrimaryKey FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName'检查结果里目标列的
IsPrimaryKey是否为1,IsIdentity是否为1,IS_NULLABLE是否为NO。如果不符合,需要重新在数据库中正确设置主键,比如用ALTER TABLE语句:ALTER TABLE YourTableName ADD CONSTRAINT PK_YourTableName PRIMARY KEY (YourColumnName)重启LinqPad
如果刷新架构后还是没效果,可能是缓存没有彻底清除。尝试关闭LinqPad,重新打开后再连接数据库,一般就能识别到新的主键设置了。确认使用的是正确的数据库连接
偶尔会出现连接错数据库的情况,比如连接到了测试环境而不是你修改的目标环境表。检查一下当前查询窗口顶部的连接名称,确保是你修改过表的那个数据库连接。
内容的提问来源于stack exchange,提问作者Rob




