属性“ id”是对象键信息的一部分,不能通过静态DbContext进行修改错误

问题描述

我们在整个项目中都有一个静态的DbContext。 这是get方法

public static istanbulEntities DbContext
{
     get
     {
        string ocKey = "ocm_" + HttpContext.Current.GetHashCode().ToString("x");
        if (!HttpContext.Current.Items.Contains(ocKey))
            HttpContext.Current.Items.Add(ocKey,new istanbulEntities());
        return HttpContext.Current.Items[ocKey] as istanbulEntities;
     }
}

当Global.asax中的例行任务正在运行时,我们将遇到以下例外情况:

  • 属性“ id”是对象键信息的一部分,无法修改
  • 已成功提交对数据库的更改,但是在更新对象上下文时发生错误。 ObjectContext可能处于不一致状态。内部异常消息:由于多个“ TBL_MAIL”类型的实体具有相同的主键值,因此保存或接受更改失败。确保显式设置的主键值是唯一的。确保在数据库和实体框架模型中正确配置了数据库生成的主键。将实体设计器用于数据库优先/模型优先配置。使用“ HasDatabaseGeneratedOption”流利的API或“ DatabaseGeneratedAttribute”进行代码优先配置。

即使我们从未显式修改任何对象的主键,也遇到了这些错误

是否可能与执行并发操作时拥有一个静态DbContext有关?

编辑:我在Global.asax中的日常任务中使用了局部变量,但是现在遇到了其他错误。这是我写过的帖子:The underlying provider failed on Open and other exceptions with local DbContext variables

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)