none
LINQ使用时不能修改数据库sql2008的主键,怎样解决? RRS feed

答案

  • 要查看某一个列是否是自增列, 您可以在您的DBML文件中,选中这张表,然后选中这个列,在对应的属性窗口中,您看一下auto generated value属性,如果是true表示是自增列,对于自增列,您是不能修改对应的值的。

     

    还有建议您尝试一下,直接在您的SQL Managerment中修改这个值,看看报出的什么错。两者因该是相同的,LINQ to SQL 会自动生成对应的update语句,然后在SQL端执行,如果您直接在SQL端执行您的update语句的话,因该能够获得到根详细的信息。

     

    谢谢

    王文渊

    2008年4月14日 12:25

全部回复

  • 如果你的主键设了自动递增的话,那么你的主键是不可自己付值递交的,也就是说你在做添加或其他相似的操作时,不须要管你的主键,你只须要把其他键付值后递交就行了!

    2008年3月23日 17:18
  •  

    因为我是用LINQ的,好像他的查询是靠主键,如果我更新外键时没有任何问题,但更新主健就出异常了,我更新的主键合法的 .
    2008年3月25日 16:08
  • 能将您的更新主键的代码以及对应的报错语句,贴上来看看吗?

    如果主键不是自增列的话,因该是可以更新的,除非有重复的值。

     

     

    谢谢

    王文渊

    2008年4月8日 11:13
  • 怎么看数据库是不是自增列呢?没有重复的记录,库里面,ID是主键.

    异常提示:类型为“rest”的对象的成员“ID”的值已更改。
    无法更改定义对象标识的成员。
    请改为考虑添加具有新标识的新对象,并删除现有的对象。

    用的是visual studio 2008中文RTM版+ SQL2005+VISTA;

     

    更新代码:

    restDataContext db = new restDataContext();
                rest stu = db.rest.First(p => p.ID=="1");
                stu.ID = "15";
                db.SubmitChanges()

     

    MSN:czy86@live.cn

    谢谢!

    2008年4月10日 5:24
  • 要查看某一个列是否是自增列, 您可以在您的DBML文件中,选中这张表,然后选中这个列,在对应的属性窗口中,您看一下auto generated value属性,如果是true表示是自增列,对于自增列,您是不能修改对应的值的。

     

    还有建议您尝试一下,直接在您的SQL Managerment中修改这个值,看看报出的什么错。两者因该是相同的,LINQ to SQL 会自动生成对应的update语句,然后在SQL端执行,如果您直接在SQL端执行您的update语句的话,因该能够获得到根详细的信息。

     

    谢谢

    王文渊

    2008年4月14日 12:25
  • 还是不能修改主键,我这不是自增列,是false值的,但还是不能,麻烦你在你机器test一下,告诉我一下结果好吗?你的解答对我帮助很大,十分感谢!

    2008年4月18日 5:16
  • 你好,

    这个问题与您的数据库结构以及其中的数据都密切相关的, 因此也没法帮您测试. 你有没有试过在数据库中直接使用UPDATE语句来更新主键,看看有没有什么报错?能否正常执行?

     

    谢谢

    王文渊

    2008年4月21日 11:09
  •  Wen Yuan Wang - MSFT 写:

    你好,

    这个问题与您的数据库结构以及其中的数据都密切相关的, 因此也没法帮您测试. 你有没有试过在数据库中直接使用UPDATE语句来更新主键,看看有没有什么报错?能否正常执行?

     

    谢谢

    王文渊



    我也遇到相同问题,直接在数据库中UPdate没有问题,一切正常。
    2008年7月18日 7:48
  • 遇到同样的问题

    提示错误

    请改为考虑添加具有新标识的新对象,并删除现有的对象。

     

    从这个错误提示的字面意思和数据库的原理方面理解是这样的

     

     

    先 插入 回头再删除

     

     

    个人理解是这样的

    2008年7月31日 3:32