Exemplo n.º 1
0
 public IDirectSaver <T> GetDirectSaver <T>(Func <ShamanOptions> optionsFactory = null)
 {
     _lock.EnterUpgradeableReadLock();
     try
     {
         object value;
         if (_directSaverCache.TryGetValue(typeof(T), out value))
         {
             return((IDirectSaver <T>)value);
         }
         _lock.EnterWriteLock();
         try
         {
             var options = ShamanOptions.CreateShamanOptions(GetType());
             var o       = options?.Services.OfType <IDirectSaverFactory>().FirstOrDefault();
             if (o == null)
             {
                 throw new Exception("Unable to find IDirectSaverFactory in ShamanOptions.Services.");
             }
             var result = o.GetDirectSaver <T>(GetType(), optionsFactory);
             _directSaverCache[typeof(T)] = result;
             return(result);
         }
         finally
         {
             _lock.ExitWriteLock();
         }
     }
     finally
     {
         _lock.ExitUpgradeableReadLock();
     }
 }
        public static void FixOnModelCreating(ModelBuilder modelBuilder, Type contextType,
                                              ShamanOptions shamanOptions = null)
        {
            shamanOptions = shamanOptions ?? ShamanOptions.CreateShamanOptions(contextType);
            Action <string> log = delegate(string message)
            {
                shamanOptions.Logger.Log(typeof(MigrationFixer), nameof(FixOnModelCreating), message);
            };

            log("Before SetRawModel");
            try
            {
                ModelsCachedContainer.SetRawModel(contextType, modelBuilder.Model, shamanOptions.Logger);
                log("After SetRawModel");
            }
            catch (Exception e)
            {
                shamanOptions.Logger.LogException(Guid.Parse("{8E4EA170-3B75-4491-8074-177E5DC8F671}"), e);
                log("After SetRawModel with exception " + e.Message);
                throw;
            }

            var fix = fixingHolder.TryFix(contextType, () =>
            {
                log("Fixing...");
                var modelFixer = new ModelCreatingFixer(contextType, shamanOptions);
                modelFixer.FixOnModelCreating(modelBuilder);
            });

            if (!fix)
            {
                log("Skip");
            }
        }
Exemplo n.º 3
0
        public static void FixOnModelCreating(ModelBuilder modelBuilder, Type contextType,
                                              ShamanOptions shamanOptions = null)
        {
            shamanOptions = shamanOptions ?? ShamanOptions.CreateShamanOptions(contextType);
            Action <string> log = message =>
                                  shamanOptions.Logger.Log(typeof(ModelFixer), nameof(FixOnModelCreating), message);

            log("Before SetRawModel");
            try
            {
                ModelsCachedContainer.SetRawModel(contextType, modelBuilder.Model, shamanOptions.Logger);
                log("After SetRawModel");
            }
            catch (Exception e)
            {
                log("After SetRawModel with exception " + e.Message);
                throw;
            }


            var fix = fixingHolder.TryFix(contextType, () =>
            {
                log("Fixing...");
                var modelFixer = new ModelFixer(contextType, shamanOptions);
                modelFixer.FixOnModelCreating(modelBuilder);
            });

            if (!fix)
            {
                log("Skip");
            }
        }
Exemplo n.º 4
0
 public ModelFixer(Type dbContextType, ShamanOptions shamanOptions, ModelInfo modelInfo = null)
 {
     _shamanOptions = shamanOptions ?? ShamanOptions.CreateShamanOptions(dbContextType);
     _info          = modelInfo ?? new ModelInfo(dbContextType, _shamanOptions.Services);
 }