C# 正在从缓存加载c对象属性

C# 正在从缓存加载c对象属性,c#,winforms,oop,object,C#,Winforms,Oop,Object,在我的win form应用程序中,有一种方法将以前创建的一些项组合在一起,当代码第一次运行时,一切正常,但在第二次和以后的运行中,组合的项的长度错误 代码使用对象类型为BetaData的LINQ从SQL server读取项 BetaData有一个名为Length的属性,该属性是double。 我有另一个列表,处理的项目存储在ModifiedPartList类型的名称PartList中 某些项的in-method-length属性发生更改,但在SQL上不会存储或保存任何内容。 这是主要的方法: p

在我的win form应用程序中,有一种方法将以前创建的一些项组合在一起,当代码第一次运行时,一切正常,但在第二次和以后的运行中,组合的项的长度错误

代码使用对象类型为BetaData的LINQ从SQL server读取项

BetaData有一个名为Length的属性,该属性是double。 我有另一个列表,处理的项目存储在ModifiedPartList类型的名称PartList中

某些项的in-method-length属性发生更改,但在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循环中,当每个部分进入循环时,它们的长度属性都是错误的。

从SQL中检索数据后,使用文章和刷新上下文解决了此问题。

是否尝试调试此方法?另外,您还没有发布实际保存更改的代码。我可以建议您通过将CombinePartList方法拆分为更小的方法来降低其复杂性吗?由于许多if/else构造,嵌套的长度和数量使得阅读和理解非常困难。我可以看到一些对SaveLength的调用。您是否可能正在覆盖数据库中的值,因此当您第二次运行它时,您实际上正在加载那些保存/更改的值?@PeterBons是的,我有,运行该方法后没有可能影响下一次运行的残差,我已一步一步地对其进行调试,当sql selection运行时,一切正常,但当对象被传递到foreach循环中时,它们会得到最后一次编辑的值,正如您在每次方法运行ClearAvedLength时的方法开头所看到的;清除已保存的所有参数。