在用于实际项目之前,我正在努力更好地理解 Linq-to-SQL,所以我在一个小项目中使用它。我有一个表,我试图通过 DataContext.SubmitChanges() 更新它,但由于主键约束而失败。
我无法控制表本身(我无法添加实际的 ID 列),因此我修改了 Linq 实体以使用 3 列作为复杂键。即使关键数据在更新集和表中的现有数据中都是唯一的,插入仍然失败,我很想知道为什么。我错过了什么迫使 Linq 将这些值视为非唯一的?
请注意,我并没有尝试解决更新问题本身 - 我已经确定在我的情况下 DataContext.ExecuteCommand() 也可以正常工作。我试图弄清楚我对 Linq(或我的数据)的理解是错误的。
表结构如下所示: OPRID (char(30)) DATE (DateTime) PROJECT_ID (char(15)) HOURS (decimal)
最后 3 列是复杂键。
这是一些示例数据,逗号分隔:cschlege, 2009-1-5, 10100, 0.8 cschlege, 2009-1-5, 10088, 1.1 cschlege, 2009-1-5, 10099, 0.8 cschlege, 2009-1-5, 10088, 1.2
SubmitChanges() 在这些行的最后一个始终失败,但给定 DATE、PROJECT_ID、HOURS 的键,这些行应该是唯一的。它不会在第 3 行失败,该行在 HOURS 列中有重复,但只有在它到达重复的 PROJECT_ID 时才会失败。但是,如果我从复杂键中删除 PROJECT_ID,则插入在第 3 行失败。
为什么 LINQ 不将这些行视为唯一键控?