使用 3 个相关实体 ID 更新实体的 ID

本文关键字:实体 ID 更新 使用 | 更新日期: 2023-09-27 18:32:58

如何将 Keyword_Id = 1 的所有记录更新为 Keyword_Id = 2?

public class KeywordAddressCategory
{
    [Key]
    [Column("Keyword_Id", Order = 0)]
    public int Keyword_Id { get; set; }
    [Key]
    [Column("Address_Id", Order = 1)]
    public int Address_Id { get; set; }
    [Key]
    [Column("Category_Id", Order = 2)]
    public int Category_Id { get; set; }
}

收到一个异常,说我无法更新实体的密钥。

谢谢

使用 3 个相关实体 ID 更新实体的 ID

这可能是因为这三个属性都是复合主键的一部分,正如实体框架优雅地指出的那样:不能更改主键值。

如果这是一个选项,我会考虑不使用复合主键,而是为此类使用单独的主键。您会发现它使使用外键变得更加简单。

所以,像这样:

[Key]
public int KeywordAddressCategoryId { get; set; }
public int Keyword_Id { get; set; }
public int Address_Id { get; set; }
public int Category_Id { get; set; }

使用此系统标识约束、外键、将 id 值作为路由值或作为表单中的隐藏字段传递,...一切都变得容易多了。对于您的问题:然后您可以轻松更改Keyword_Id值,因为您可以轻松更改外键值。

我知道这并不能真正回答你的问题,因为我还没有告诉你如何实际更改值,但无论如何我想发布这个答案,所以也许你可以重新考虑你的数据库结构。

编辑:如果您真的不能或不愿意更改数据库结构,请参阅有关如何实现所需内容的问题: 更新部分主键 实体框架 4.0