0

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

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

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

如果用户确认,我会分配一个绝对 PK 并且数据库会更新所有 ONCASCADE

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

属性“PK”是对象键信息的一部分,无法修改

我该怎么做才能避免这个异常?

4

1 回答 1

3

这是一个老问题,但我想我会在上面抛出一个答案,因为我刚刚遇到了一个类似的问题,我必须更新实体上的主键值。我直接在数据库上执行了一条 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 更新主键,如果必须,使用旧的主键值作为标识符应该不会有任何问题。但是,如果主键值是标识符,请记住搜索的主键重置实体时的键值)。

于 2017-06-21T20:16:48.780 回答