2015-05-11 1 views
1

У меня есть XPCollection в одном из моих классов. Это XPCollection другого класса. Когда я запускаю приложение, XPCollection не получает Loaded. Я вижу это четко в точке останова при отладке. Вот код, который я использую в своем объекте. :XPCollection Not Loading

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); 

     } 
    } 
+0

Обычно вам не нужно проверять LimitAllocations.IsLoaded. Коллекция LimitAllocations будет загружаться всякий раз, когда используется. – ErikWitkowski

ответ

0

XPCollection загружается по требованию. От the documentation:

В большинстве случаев, коллекция должна быть создана для доступа к объектам определенного типа из хранилища данных. Класс XPCollection реализует задержку загрузки, то есть он заполняется постоянными объектами из хранилища данных по требованию. Например, вы можете создать экземпляр XPCollection , который помечен для размещения пользовательских объектов Person. Однако коллекция будет заполнена объектами Person из хранилища данных только при доступе к содержимому коллекции.

Вы можете принудительно загрузить нагрузку из хранилища данных, позвонив по телефону XPCollection.Load(), но обычно this should not be necessary.

0

Вы можете безопасно инициализировать эту коллекцию методом OnLoaded, или вы можете проверить значение свойства IsLoading и IsSaving в getter свойства и вернуть, если любое из них истинно. Только когда (IsLoading || IsSaving) == false вы можете безопасно загружать коллекцию из БД.

вы можете попробовать это на методе геттера;

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

      // .... your codes 
     } 
}