在表中没有主键的列上设置IsPrimaryKey = true

时间:2010-10-14 15:16:10

标签: c# sql sql-server linq-to-sql sql-server-2008

我正在编写一个使用LINQ to SQL的快速应用程序,用一些测试数据填充数据库并遇到问题,因为其中一个表没有主要密钥,如此bloke Can't Update because table has no primary key所述。

得到最佳答案我将IsPrimaryKey属性添加到适当的列,即使我没有更改db表本身(即仍然没有主键),应用程序仍然有效。

我希望它对我目前的意图是可行的,但是有没有副作用可能来自于没有主键的表被LINQ对象看作有一个?

(我只能认为,如果我试图从表中读取(或填充到表格),其中“主键”列在多行中具有相同的值,则可能会出现问题。)

2 个答案:

答案 0 :(得分:3)

使用ORM框架时,可以在ORM级别模拟密钥和外键,从而“隐藏和覆盖”数据库定义的密钥和外键。

那就是说,这是我不推荐的做法。即使模型比数据库本身更重要,逻辑结构也应始终匹配。如果您被迫使用旧数据库并且无法修复它(例如在表上添加PK),那么您可以执行您所做的操作。但是每次你都可以尝试走正义之路:)。

没有PK的表= Pure Evil。

答案 1 :(得分:2)

基本上,如果所有表更新都通过LINQ对象,你应该没问题。如果您有一个DBA决定直接通过SQL修改数据,那么如果他复制具有相同PK值的行,您可以快速遇到问题。