SQL Server查询返回OLD值,直到重新启动应用程序

时间:2015-08-24 08:11:28

标签: c# sql-server linq linq-to-sql sql-server-2014

我有一个奇怪的问题。我有一个简单的应用程序,它将一些行从sql server数据库中的视图复制到另一个sql server数据库中的表。它首先检查源视图和目标表的计数,如果它们不同,则获取数据。此过程使用计时器无限期地重新发生。

奇怪的是,在一些迭代之后,结果冻结和查询在每次运行时返回相同的旧值。但是,如果我关闭并重新打开应用程序,查询将返回更新的结果。

我无法理解为什么会这样。我正在使用LINQ to SQL。我已经尝试了一切,将linq db context转换为局部变量,启用或禁用了对象跟踪,使用了事务,但它们都不起作用。这是我的一个函数的代码片段(删除了一些强制转换和不需要的代码):

    private void DoEvals()
    {
        [...]

        dbDataContext db = new dbDataContext { ObjectTrackingEnabled = true };
        localDataContext localdb = new localDataContext { ObjectTrackingEnabled = true };

        List<Evaluation> evals = new List<Evaluation>();
        try
        {
            var countOnline = (from x in db.Leads where x.StateCode == 0 select x).Count();
            var countOffline = (from x in localdb.Evaluations select x).Count();

            if (countOnline == countOffline)
            {
                return;
            }

            int stepCount = 500;

            int steps = countOnline / stepCount;

            for (int currentStep = 0; currentStep <= steps; currentStep++)
            {
                var q = (from l in db.Leads
                         where l.StateCode == 0
                         select l);

                q = currentStep != steps ? q.Skip(currentStep * stepCount).Take(stepCount) : q.Skip(currentStep * stepCount);

                evals.AddRange(q.ToList());
            }

        }
        catch (Exception exc)
        {
        }

        [...]
    }

你知道为什么会这样吗?我在两个环境(远程视图,本地表 - 本地视图,本地表)中尝试过这个应用程序,所以我认为这不是因为网络节点中的缓存。

1 个答案:

答案 0 :(得分:0)

您需要处理每个数据库上下文。此外,从不Exception

using (dbDataContext db = new dbDataContext())
using (localDataContext localdb = new localDataContext())
{
   // do your stuff
}