当前位置:编程学习 > C#/ASP.NET >>

一个最基本的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
或者在程序实现
你现在报错是因为有外键关系在 --------------------编程问答--------------------
引用 7 楼 q107770540 的回复:
修改外键?
不如新建一条新的,把老的给删除掉
通常我也是这么做。 --------------------编程问答-------------------- TestB.Testa = 你想要的Testa
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,