首页 > 解决方案 > 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 属性是错误的。

标签: c#winformsoopobject

解决方案


在从 SQL 检索数据后,使用本文和刷新上下文解决了该问题


推荐阅读