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

标签 .net linq composite-key

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

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

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

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

最佳答案

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

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

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

相关文章:

c++ - 在 .Net 中使用 OpenSSL RSA key

.net - 程序包还原失败。回滚软件包更改-Serilog.AspNetCore

xml - 您如何在 Linq To Xml 中防范 Null Reference 异常?

REST - 如何设计带有复合键的 URI?

MySQL - 使一对值唯一

.net - 避免在 appsettings 中多次使用相同的 url

.net - n 层应用程序中的依赖注入(inject)?

c# - C# 中的 LINQ 分组依据和排序依据

c# - Linq 过滤历史记录中的行差异

ruby-on-rails - 在代理键存在的情况下,我应该如何为域约束定义复合外键?