c# - c# 对象属性正在从缓存中加载
问题描述
在我的win-form应用程序中,有一种方法可以组合之前创建的一些项目,当代码第一次运行时,一切都很好,但是在第二次和以后的运行中,组合项目的长度错误。
该代码使用具有名为“BetaData”的对象类型的 LINQ 从 SQL 服务器读取项目
BetaData 有一个名为“Length”的属性,它是双精度的。我有另一个列表,已处理的项目存储在“ModifiedPartList”类型的名称“PartList”中。
某些项目的方法长度属性更改,但没有任何内容存储或保存在 SQL 上。这是主要方法:
private List<ModifiedPartList> CombinePartList(ProgressBar Bar)
{
PartList.Clear();
List<BetaData> PartsinOrder = new List<BetaData>();
foreach (int view in Globals.Views)
{
List<int> OrdersInView = new List<int>();
foreach (Tuple<int, int> tuple in Globals.Orders)
{
if (tuple.Item1 == view)
{
if (!OrdersInView.Contains(tuple.Item2))
OrdersInView.Add(tuple.Item2);
}
}
if(OrdersInView.Count>0)
{
OrdersInView.Sort();
foreach (int order in OrdersInView)
{
//this is the section that problem occurs:
var parts = from BetaData in BetaContext.BetaDatas
where BetaData.ProjectName == Globals.ProjectName &&
BetaData.ProjectCode == Globals.ProjectCode &&
BetaData.ParentItem != Globals.ProjectName + "(" + Globals.ProjectCode + ")" &&
BetaData.View == view &&
BetaData.Order == order
select BetaData;
PartsinOrder.Clear();
PartsinOrder = parts.ToList();
foreach(BetaData part in PartsinOrder)
{
Bar.PerformStep();
}
}
}
PartsinOrder.Clear();
}
return PartList;
}
在第二次运行代码时我评论为问题位置的部分中,优化的长度属性被加载到项目而不是 SQL 中的原始值。我无法理解,因为每次我从 SQL Server 读取所有项目。关键是在这个阶段之后,我多次运行该方法并在我关闭程序并再次启动它时得到错误的结果,第一次运行结果是正确的。从 SQL 中选择并将其转换为列表后,我查看列表中的项目及其属性,它们都是正确的,但是在 foreach 循环中,当每个部分进入循环时,它们的 Length 属性是错误的。
解决方案
在从 SQL 检索数据后,使用本文和刷新上下文解决了该问题
推荐阅读
- java - Java没有继续循环
- html - 如何在此 Html 页面中将行内联?
- javascript - 如何在嵌套在 ul li 中的锚标记中添加活动类
- netbeans - netbeans - 调试器以代码 0xc0000135 退出
- java - 未处理的异常,但尝试捕获块似乎没有做我认为应该做的事情
- makefile - 使用 cygwin 在 Windows 上构建 Seafile-Client
- python - 随机森林sklearn
- amazon-web-services - 转移 AWS 促销积分
- angular - Angular 6 中的细粒度高度计算是可能的,还是我应该求助于 JQuery?
- vb.net - 在 .Net 中使用 XPath 对 XML 进行排序