日期:2014-05-20  浏览次数:20826 次

LINQ to Entities 中怎么更新主键的值?
       Try
            econtext.SaveChanges()
            MsgBox("更新成功*_*")
        Catch ex As UpdateException
            MsgBox("更新失败!_!" & ex.Message)
        End Try

报错:"属性“物料代码”是对象的键信息的一部分,不能修改。"

网上逛了很久,都说linq的规则就是不能更新主键,当然,有变通的方法,比如先删除,再添加,不过这情况不适合我,我也不想回头去给每张表都加个自增列主键,请问各位有别的什么方法实现,谢谢!


------解决方案--------------------
LINQ也是可以直接执行SQL语句的
在SQL语句中做以下几件事
1. 删除主键约束
2. 更新主键
3. 还原主键约束

------解决方案--------------------
引用:
LINQ也是可以直接执行SQL语句的
在SQL语句中做以下几件事
1. 删除主键约束
2. 更新主键
3. 还原主键约束

这只是一种变通——如同脑筋急转弯,在更新的时候,它不是主键。或者诸如删除了再添加也是一样。

事实上,在任何数据库系统中,都不应该修改主键。为什么你会有这么奇怪的需求,是因为你根本不懂数据库的设计。很多误人子弟的老师会说,你可以把一个不重复的字段作为主键,这完全是胡说。主键用来标识一条独立的记录,并且一旦创建,它就是代表着条记录的唯一凭据。因为主键有这样的用途,所以它应该是一个和任何业务无关的数据——只和标识这条记录用途的数据库设计有关。

按照你的需求,你应该重新定义主键,把目前的字段还原为一般的字段,如果它是唯一的,加上唯一约束。