一个最基本的linq问题
表testa字段 a(主键)
字段 b
表testb
字段 b(主键)
字段 a(外键)
a和b是一对多的表
已经设置了级联更新了,在数据库可以直接改testa的a值,更改后表testb中的外键会级联更新
使用linq这段代码更新,报错
testEntities te = new testEntities();
testa q = (from n in te.testa
where n.a == 5
select n).First();
q.a = 4;
te.SaveChanges();
报错内容:
属性“a”是对象的键信息的一部分,不能修改。
--------------------编程问答-------------------- 主键唯一,一般不更改 --------------------编程问答-------------------- a是主键,主键是不能修改的 --------------------编程问答--------------------
现在业务需要更改 --------------------编程问答-------------------- 好像这个是linq内部问题。如果用sql语句就可以修改~
--------------------编程问答-------------------- 是的,linq是通过主键来修改其他字段的,这个你通过sql语句用传统的ado.net来修改吧 --------------------编程问答-------------------- 暂时只能这样了,有点胸闷 --------------------编程问答-------------------- 修改外键?
不如新建一条新的,把老的给删除掉 --------------------编程问答-------------------- 很奇怪什么样的业务竟然需要更好主键?本身主键的作用仅仅就是唯一标识了,既然是唯一标识了为啥还要修改呢?
就像楼上所说,没用了就删除掉,有新的就新建出来即可。 --------------------编程问答-------------------- q.a = 4;有错
主键不能修改
--------------------编程问答-------------------- 看看主键与外键吧! --------------------编程问答-------------------- --------------------编程问答-------------------- 这种级联个人觉得比较危险 --------------------编程问答-------------------- 修改a的话就要去掉两个表的关联即testb 字段 a(外键)关系,
然后用触发器,修改a(主键)自动修改testb 字段 a
或者在程序实现
你现在报错是因为有外键关系在 --------------------编程问答-------------------- 通常我也是这么做。 --------------------编程问答-------------------- TestB.Testa = 你想要的Testa
补充:.NET技术 , LINQ