更新具有3个相关实体ID的实体的ID

时间:2013-09-27 11:57:27

标签: c# entity-framework asp.net-mvc-4

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

我得到一个例外,说我无法更新实体的密钥。

由于

1 个答案:

答案 0 :(得分: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值,因为您可以轻松更改外键值。

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

编辑:如果您真的不能或不愿意更改数据库结构,请参阅此问题,了解如何实现您的目标:Update part of primary key Entity Framework 4.0