我有一个表,它有一个由两个 int 字段和一个 varchar(50) 字段组成的复合键。我将复合键设为我的主键,而我通常不会这样做。是的,是的,是的,我对逻辑键与代理键的辩论非常熟悉,但我一定在我上桌的那天做了一些重药(不是真的),因为我采用了逻辑键方法使用代理(我几乎总是这样做)。
我的问题:LINQ 不允许我对作为复合键一部分的 varchar(50) 列进行更新。它抛出异常“属性‘值’是对象的关键信息的一部分,不能被修改。” 'Value' 是该字段的名称(请不要教我在列名中使用保留字......就像我已经说过的那样,那天我正在服用严重的药物)。
那么,除了在岩石和坚硬的地方之间,这给我留下了什么?有问题的表实际上确实有一个唯一的标识列(即使它不是主键),并且该列被用于另一个表的外键。所以,呃,我不能很容易地做一些黑客攻击,比如删除有问题的记录并重新添加它,因为这会迫使我跟踪其他表中的 fk,然后再重新添加它们。什么样的恶梦...
任何人都知道一个简单的方法来解决这个问题,而不会强迫我对我的表结构进行大量更改?