【问题标题】:dbcontext is retrieving the old data and not updateddbcontext 正在检索旧数据且未更新
【发布时间】:2014-06-25 08:18:14
【问题描述】:

我正在我的控制器中初始化 dbContext,如下所示:

public class BaseController : Controller
{
    protected KContext db;

    public BaseController()
    {
        db = new KContext();
    }
}

我在我的控制器中执行通常的添加、编辑、删除操作,我还有一个名为 serviceChecker 的类,它继承了注册表(来自 FluentScheduler),我还在那里初始化了另一个 dbcontext,如下所示:

public class ServiceChecker : Registry
{
    KContext db;
    public ServiceChecker()
    {
        db = new KContext();
    }
}

我检查了此类中的一些表并编辑了一些实体,这些实体也从我的控制器中更新。现在我面临的问题是,在我更改实体后,我们将其称为 serviceDoman 的字段 endDate7/11/20147/11/2016,它可以很好地更新实体但是当 servicechecker 触发检查功能时(每 60 sec),它必须更新该实体的另一个字段,这很好,但它也将endDate 更改回7/11/2014(第一次编辑之前的旧值),可能是什么原因?

【问题讨论】:

  • 你为什么不为每个请求使用一个DbContext
  • 在我的控制器或 servicechecker 类中?因为在控制器中它工作正常问题发生在我的 servicechecker 类中
  • 你为什么不在两个请求中都使用一个DbContext
  • 我对 mvc 概念很陌生,请您指出关于每个请求一个 DbContext 的正确方向吗?可能是我的问题的原因?
  • @qujck 感谢您的链接,我现在明白了,尽管我设法以某种方式解决了问题,但我应该将该链接提供给实现此功能的人:)

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


【解决方案1】:

更新实体后获取旧值的可能原因是您没有调用SaveChanges() 方法来保存实体更改,并且您正在ServiceChecker 类中创建一个新的上下文对象,该对象对您所做的更改一无所知使用您以前的(另一个)上下文对象在实体中制作。

一种解决方案是在对实体进行更改后调用SaveChanges() 方法。

注意:使用通用上下文对象执行所有操作是一种很好的做法

【讨论】:

  • 不,我在这里使用存储库模式,我正在调用调用 SaveChanges() 的保存函数,我还检查控制器完成的更新值并且它已更新,但正是在 serviceChecker 调用它使用旧数据的检查功能,就像我的 serviceChecker 中的 dbcontext 没有更新或类似的东西......有点迷失在这里
  • 能否请您给我一个关于为我的 BaseController 和我的 ServiceChecker 使用公共上下文的提示?提前致谢
  • 创建一个 BaseAbstractRepository 以创建上下文或 DbContext 对象并从该基本存储库继承其他存储库,通过这样做,您将在您的应用。我建议你使用 DbContext 对象。
  • 我已经有一个基础存储库,它采用初始化的 dbcontext 。基本上我在我的控制器或我的 ServiceChecker 中初始化 dbcontext,然后将它传递给每个存储库,它们都是从我的基础存储库继承的。我知道这个概念不是最好的,它是由另一个人实现的,我不得不解决问题
  • 只需使用依赖注入,让一些容器管理你的DbContext的生命周期。
猜你喜欢
  • 2021-09-23
  • 2021-05-20
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
相关资源
最近更新 更多