1

クラスの 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

AnXPCollectionはオンデマンドでロードされます。ドキュメントから:

ほとんどの場合、データ ストアから特定の型のオブジェクトにアクセスするには、コレクションを作成する必要があります。このXPCollectionクラスは遅延読み込みを実装します。つまり、オンデマンドでデータ ストアから永続オブジェクトが読み込まれます。XPCollection たとえば、カスタム Person オブジェクトを含むようにマークされたインスタンスを作成できます。ただし、コレクションには、コレクションのコンテンツがアクセスされた場合にのみ、データ ストアからの Person オブジェクトが取り込まれます。

を呼び出してデータストアから強制的にロードできますがXPCollection.Load()、通常は必要ありません

于 2015-06-03T09:17:48.257 に答える
0

OnLoaded メソッドでそのコレクションを安全に初期化するか、プロパティ ゲッターで IsLoading および IsSaving プロパティの値をチェックし、それらのいずれかが true の場合に返すことができます。(IsLoading || IsSaving)==false の場合のみ、DB からコレクションを安全にロードできます。

getter メソッドでこれを試すことができます。

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

            //  .... your codes
        }
}
于 2015-06-11T14:18:46.407 に答える