EF更改主键值

时间:2013-10-15 19:51:19

标签: c# entity-framework

我有一个带有字符串PK的EF实体,以及与之相关的其他实体

public class E1
{
    public string PK {get;set;}
    .....   
} 

在我的过程中,我为我的所有结构(E1和相关实体)分配了一个临时PK,等待用户确认文件。

如果用户确认,我指定一个definitelly PK,数据库更新所有ONCASCADE

我的问题是,当我试图改变E1的状态时,它会抛出此异常

  

物业' PK'是对象键信息的一部分,无法修改

如何避免此异常?

1 个答案:

答案 0 :(得分:1)

这是一个老问题,但我想我会在那里抛出一个答案,因为我遇到了类似的问题,我不得不更新实体的主键值。我直接在数据库上执行了一个SQL命令来更新主键值,然后我处理并重新实例化了上下文。它运作得很好。这是一个代码示例:

if(theEntity.PKValue != newPkValue)
{
    context.Database.ExecuteSqlCommand("UPDATE table SET PKValue = @p0 WHERE identifier = @p1", newPKValue, identifierValue);
    context.Dispose();
    context = new ContextName();
    theEntity = context.tables.Single(e => e.identifier == identifierValue);
}

(由于您使用直接SQL更新主键,因此如果必须使用旧主键值作为标识符,则不应该有任何问题。但是,如果主键值是标识符,请记住搜索重置实体时 new 主键值。)