You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何为旧表添加主键后Linq/Linqpad仍不识别该主键?

解决LinqPad无法识别新增主键的问题

这种情况我碰到过好几次,LinqPad的元数据缓存有时候会跟不上数据库结构的变化,别着急,按下面几步来就能解决:

  • 刷新数据库连接的架构缓存
    LinqPad会默认缓存数据库的表结构信息,当你手动修改了数据库表的主键后,它不会自动感知到。你需要手动刷新:

    1. 在左侧的连接面板里找到对应的数据库连接
    2. 右键点击它,选择Refresh Schema选项
    3. 等待刷新完成后,再尝试执行增删改操作
  • 验证主键在数据库中的实际状态
    有时候可能误以为主键设置成功,但实际数据库里并没有生效。你可以在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

火山引擎 最新活动