我有一个奇怪的问题。我有一个简单的应用程序,它将一些行从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)
{
}
[...]
}
你知道为什么会这样吗?我在两个环境(远程视图,本地表 - 本地视图,本地表)中尝试过这个应用程序,所以我认为这不是因为网络节点中的缓存。
答案 0 :(得分:0)
您需要处理每个数据库上下文。此外,从不吃Exception
。
using (dbDataContext db = new dbDataContext())
using (localDataContext localdb = new localDataContext())
{
// do your stuff
}