コード例 #1
0
 /// <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);
         }
 }
コード例 #2
0
 /// <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);
 }
コード例 #3
0
            /// <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);
            }
コード例 #4
0
        /// <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);
        }