gpt4 book ai didi

.net - LINQ 对复合键的可悲处理

转载 作者:行者123 更新时间:2023-12-02 00:39:51 26 4
gpt4 key购买 nike

我有一个表,它有一个复合键,该键由两个 int 字段和一个 varchar(50) 字段组成。我将复合键设为主键,但我通常不这样做。是的,是的,是的,我非常熟悉逻辑键与代理键的辩论,但自从我采用逻辑键方法以来,我在制作表格的那一天肯定做了一些重药(不是真的)使用代理人(我几乎总是这样做)。

我的问题:LINQ 不允许我更新作为复合键一部分的 varchar(50) 列。它抛出异常“属性'Value'是对象关键信息的一部分,无法修改。” “值”是字段的名称(请不要教我如何使用列名称的保留字……就像我已经说过的那样,我当天正在服用严重的药物)。

那么,除了进退两难之外,这还能把我留在哪里?有问题的表实际上确实有一个唯一的标识列(即使它不是主键),并且该列正在另一个表的外键中使用。所以,呃,我不能很容易地做一些 hack,比如删除有问题的记录并重新添加它,因为这会迫使我跟踪其他表中的 fk,然后也重新添加它们。真是一场噩梦……

有谁知道解决这个问题的简单方法,而不用强制我对表结构进行大量更改?

最佳答案

如果您在该表上已经有一个唯一的 IDENTITY 列,那么它应该是您的主键。主键应该始终只在表中最小大小的候选(唯一)键之间进行选择,并且应该几乎总是不可变的。

您甚至不必将 IDENTITY 列设置为数据库的主键,只需将其设置为 Linq to SQL 模型中的键列,一切都会正常进行。

关于.net - LINQ 对复合键的可悲处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2969707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com