0

如何将 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; }
}

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

谢谢

4

1 回答 1

0

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

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

所以,像这样:

[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 的部分

于 2013-09-27T12:30:37.007 回答