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

DataContext始终为ReadOnly,数据库已设主键却无法更新求助

问题原因与解决方案
  • 核心问题:你的LINQ实体类未标记主键字段,导致LINQ to SQL无法识别表的主键,因此IsReadOnly返回true,同时无法追踪实体变更。

  • 解决方法:在ID字段的Column特性中添加IsPrimaryKey = true,修改后的实体类代码如下:

[Table(Name = "TestTable")]
public class TestTable
{
    [Column(IsPrimaryKey = true)] public int ID { get; set; }
    [Column] public string Value { get; set; }
}
  • 原理说明:
    LINQ to SQL依赖实体类上的主键标记来识别可编辑的实体,没有这个标记时,它会认为该实体类型没有主键,进而将表标记为只读,同时不会追踪任何对实体属性的修改——这就是为什么GetChangeSet始终显示没有更新,SubmitChanges也没有效果的原因。

  • 验证效果:
    修改实体类后,db.GetTable<TestTable>().IsReadOnly会返回false,修改Value属性后,GetChangeSet能正确捕获到更新操作,执行SubmitChanges后数据库数据会同步更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:49:54