1

我的一个班级中有一个 XPCollection。这是另一个类的 XPCollection。当我运行应用程序时,XPCollection 没有被加载。调试的时候在断点处可以看得很清楚。这是我在我的对象中使用的代码。:

  private XPCollection<LimitAllocationTotals> _LimitAllocationTotals;

    public XPCollection<LimitAllocationTotals> LimitAllocationTotals   LimitAllocationTotals
    {
        get
        {


            if (LimitAllocations.IsLoaded && LimitAllocations != null)
            {
                UnitOfWork uow = new UnitOfWork();
                _LimitAllocationTotals = new XPCollection<LimitAllocationTotals>(uow, new BinaryOperator("Oid", Guid.Empty));
                _LimitAllocationTotals.Session = this.Session;
                foreach (LimitAllocation allocation in LimitAllocations)
                {
                    LimitAllocationTotals allocationTotals = new LimitAllocationTotals(this.Session);

                    allocationTotals.MTMLimit += allocation.MTMLimit;
                    allocationTotals.ARLimit += allocation.ARLimit;
                    allocationTotals.Volume += allocation.Volume;
                    allocationTotals.MaxTenor = allocation.MaxTenor;
                    allocationTotals.SourceEntity = allocation.SourceEntity;
                    allocationTotals.Commodity = allocation.Commodity;
                    allocationTotals.ConvertedVolume = allocation.ConvertedVolume;
                    _LimitAllocationTotals.Add(allocationTotals);

                }


                foreach (LimitExtension extension in LimitExtensions)
                {
                    if (extension.ExpirationDate >= DateTime.Now)
                    {
                        LimitAllocationTotals searchAllocation = null;
                        foreach (LimitAllocationTotals allocation in _LimitAllocationTotals)
                        {
                            if (allocation.SourceEntity != null && allocation.SourceEntity.Oid.Equals(extension.SourceEntity.Oid))
                            {
                                searchAllocation = allocation;
                                break;
                            }
                        }

                        if (searchAllocation == null)
                        {
                            searchAllocation = new LimitAllocationTotals(this.Session);
                            searchAllocation.SourceEntity = extension.SourceEntity;
                            _LimitAllocationTotals.Add(searchAllocation);
                        }

                        searchAllocation.MTMLimit += extension.MTMLimit;
                        searchAllocation.ARLimit += extension.ARLimit;
                        searchAllocation.Volume += extension.Volume;
                        searchAllocation.Commodity = extension.Commodity;
                        searchAllocation.MaxTenor += extension.MaxTenor;
                       // searchAllocation.CalculateMeasureConversion(_Commodity, _VolumeUnit);
                        //searchAllocation.VolumeUnit = extension.VolumeUnit;

                    }
                }
            }
            return _LimitAllocationTotals;
        }
        set
        {
            SetPropertyValue("LimitAllocationTotals", ref _LimitAllocationTotals, value);

        }
    }
4

2 回答 2

0

XPCollection按需加载。从文档中

在大多数情况下,需要创建一个集合来访问数据存储中特定类型的对象。该类XPCollection实现延迟加载,即它根据需要从数据存储中填充持久对象。例如,您可以创建一个XPCollection 实例,该实例被标记为包含自定义 Person 对象。但是,仅当访问集合的内容时,才会使用来自数据存储的 Person 对象填充该集合。

您可以通过调用来强制从数据存储中加载,XPCollection.Load()但通常这不是必需的。

于 2015-06-03T09:17:48.257 回答
0

您可以在 OnLoaded 方法上安全地初始化该集合,或者您可以检查属性 getter 中的 IsLoading 和 IsSaving 属性值,如果其中任何一个为真,则返回。只有当 (IsLoading || IsSaving)==false 时,您才能安全地从数据库加载集合。

你可以在getter方法上试试这个;

public XPCollection<LimitAllocationTotals> LimitAllocationTotals 
{
        get
        {
            if (IsLoading || IsSaving)
                return _LimitAllocationTotals;

            //  .... your codes
        }
}
于 2015-06-11T14:18:46.407 回答