/// <summary> /// Método acionado quando ocorre um erro na carga do cache. /// </summary> /// <param name="e"></param> public void OnLoadError(CacheLoaderErrorEventArgs e) { lock (_observers) foreach (var i in _observers) { i.OnLoadError(e); } }
/// <summary> /// Move para o próximo nome de tipo que será processado. /// </summary> /// <returns></returns> private bool MoveNextTypeMetadata() { while (_typeMetadatasEnumerator != null && _typeMetadatasEnumerator.MoveNext()) { var typeMetadata = _typeMetadatasEnumerator.Current; _loader.Observer.OnStageChanged(new CacheLoaderStage("LoadingType", ResourceMessageFormatter.Create(() => Properties.Resources.CacheLoader_LoadingTypeName, typeMetadata.FullName))); _loader.Observer.OnCurrentProgressChanged(new System.ComponentModel.ProgressChangedEventArgs((_position++ *100 / _typeMetadatasCount), null)); if (_loader.Observer is IDataCacheLoaderObserver) { ((IDataCacheLoaderObserver)_loader.Observer).OnBeginLoadTypeMetadata(typeMetadata); } var typeName = new Colosoft.Reflection.TypeName(!string.IsNullOrEmpty(typeMetadata.Assembly) ? string.Format("{0}, {1}", typeMetadata.FullName, typeMetadata.Assembly) : typeMetadata.FullName); Query.IQueryResult result = null; try { var columns = new List <Query.ProjectionEntry>(typeMetadata.Select(f => new Query.ProjectionEntry(f.Name, null))); if (typeMetadata.IsVersioned && !columns.Exists(f => { var column = f.GetColumnInfo(); return(column != null && StringComparer.InvariantCultureIgnoreCase.Equals(column.Name, "RowVersion")); })) { columns.Add(new ProjectionEntry("RowVersion", null)); } result = _loader.SourceContext.CreateQuery().From(new Query.EntityInfo(typeMetadata.FullName)).Select(new Query.Projection(columns)).NoUseCache().Execute(); _recordEnumerator = result.GetEnumerator(); } catch (Exception ex) { var args = new CacheLoaderErrorEventArgs(ResourceMessageFormatter.Create(() => Properties.Resources.DataCacheLoader_CreateQueryError, typeMetadata.FullName), ex); _loader.OnLoadError(typeName, args); if (_loader.Observer is IDataCacheLoaderObserver) { ((IDataCacheLoaderObserver)_loader.Observer).OnEndLoadTypeMetadata(typeMetadata, ex); } continue; } _currentTypeName = typeName; _currentGenerator = _loader.RecordKeyFactory.CreateGenerator(_currentTypeName); return(true); } _currentTypeName = null; _currentGenerator = null; if (_recordEnumerator != null) { try { _recordEnumerator.Dispose(); } catch { } } _recordEnumerator = null; return(false); }
/// <summary> /// Move o próximo registro. /// </summary> /// <returns></returns> public bool MoveNext() { var moved = false; while (true) { moved = false; try { if (_recordEnumerator != null) { moved = _recordEnumerator.MoveNext(); } } catch (Exception ex) { if (_recordEnumerator != null) { _recordEnumerator.Dispose(); } _recordEnumerator = null; var args = new CacheLoaderErrorEventArgs(ResourceMessageFormatter.Create(() => Properties.Resources.DataCacheLoader_GetRecordError, _typeMetadatasEnumerator.Current.FullName), ex); _loader.OnLoadError(_currentTypeName, args); if (_loader.Observer is IDataCacheLoaderObserver) { ((IDataCacheLoaderObserver)_loader.Observer).OnEndLoadTypeMetadata(_typeMetadatasEnumerator.Current, ex); } } if (_recordEnumerator != null && !moved) { _recordEnumerator.Dispose(); _recordEnumerator = null; if (_loader.Observer is IDataCacheLoaderObserver) { ((IDataCacheLoaderObserver)_loader.Observer).OnEndLoadTypeMetadata(_typeMetadatasEnumerator.Current, null); } } if (_recordEnumerator == null && MoveNextTypeMetadata()) { continue; } break; } if (_recordEnumerator == null) { _loader.Observer.OnCurrentProgressChanged(new System.ComponentModel.ProgressChangedEventArgs(100, null)); return(false); } return(moved); }
/// <summary> /// Método acionado quando ocorrer /// </summary> /// <param name="typeName">Nome do tipo onde ocorreu o erro de carga</param> /// <param name="e"></param> protected void OnLoadError(Colosoft.Reflection.TypeName typeName, CacheLoaderErrorEventArgs e) { var index = _errorTypeNames.BinarySearch(typeName, Colosoft.Reflection.TypeName.TypeNameFullNameComparer.Instance); if (index < 0) { _errorTypeNames.Insert(~index, typeName); } if (LoadProcessingError != null) { LoadProcessingError(this, e); } Observer.OnLoadError(e); }