Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# dbcontext正在检索旧数据,但未更新_C#_Entity Framework_Asp.net Mvc 3_Asp.net Mvc 4_Dbcontext - Fatal编程技术网

C# dbcontext正在检索旧数据,但未更新

C# dbcontext正在检索旧数据,但未更新,c#,entity-framework,asp.net-mvc-3,asp.net-mvc-4,dbcontext,C#,Entity Framework,Asp.net Mvc 3,Asp.net Mvc 4,Dbcontext,我正在控制器中初始化dbContext,如下所示: public class BaseController : Controller { protected KContext db; public BaseController() { db = new KContext(); } } 我在我的控制器中执行常规的添加、编辑和删除操作,我还有一个名为serviceChecker的类,它继承了注册表(来自FluentScheduler),我还有另一个

我正在控制器中初始化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的字段
endDate
2014年11月7日
更改为
2016年11月7日
,它会很好地更新实体,但当
servicechecker
触发检查功能时(每60秒一次),它必须更新该实体的另一个字段,这很正常,但它也会将
结束日期更改回
2014年11月7日
(第一次编辑前的旧值),原因可能是什么

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

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


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

为什么不在我的controller或servicechecker类中为每个请求使用一个
DbContext
?因为在控制器中工作正常,所以问题发生在我的servicechecker类中。为什么不在这两个类中对每个请求都使用一个
DbContext
?我对mvc概念非常陌生,您能为我指出关于每个请求一个DbContext的正确方向吗?这可能是我的问题的原因吗?@qujck谢谢你的链接,我现在明白了,虽然我设法解决了问题,但我应该把这个链接给实现这个的人:)不,我在这里使用了存储库模式,我调用了我的save函数,它调用SaveChanges(),我还检查控制器完成的更新值,并且它已更新,但正是当serviceChecker调用检查函数时,它使用了旧数据,某种程度上类似于我的serviceChecker中的dbcontext尚未更新或类似的内容。。。这里有点迷糊了,你能给我一个关于为我的BaseController和ServiceChecker使用公共上下文的提示吗?首先感谢您创建一个
Base
AbstractRepository
,在其中创建您的上下文或
DbContext
对象并从该基本存储库继承其他存储库,这样您将在应用程序中只创建一个上下文对象。我建议您使用
DbContext
对象。我已经有一个基本存储库,它接受初始化的DbContext。基本上,我在我的控制器或ServiceChecker中初始化DbContext,然后将其传递给每个存储库,它们都从我的基本存储库继承。我知道这个概念不是最好的,它是由另一个人实现的,我不得不解决这个问题。必须使用依赖注入,让一些容器管理
DbContext
的生命周期。