Galen.Ci.EntityFramework.DbDeploymentManager.HandleDataSeeding C# (CSharp) Method

HandleDataSeeding() private method

private HandleDataSeeding ( ) : void
return void
        private void HandleDataSeeding()
        {
            if (InitializerInfo?.Initializer == null)
            {
                Log.Debug("Seeding skipped as no initializer available");
                return;
            }

            Log.Information(
                "Handling database seeding for {contextType} on {endPointServer}\\{endpointDatabase}",
                InitializerInfo.ContextType,
                m_Config.Database.ServerName,
                m_Config.Database.DatabaseName);

            var forcedSeedingDisabled = m_Config.InitializationConfig.DisableForcedSeeding;

            if (forcedSeedingDisabled && m_Config.Mode == DeploymentMode.SeedOnly)
            {
                forcedSeedingDisabled = false;
            }

            Log.Debug(
                "Initailizer ({initializer}) to be used for seeding found for {contextType} on {endPointServer}\\{endpointDatabase}. Disable forced seeding is set to {forcedSeedingDisabled}",
                InitializerInfo.Initializer,
                InitializerInfo.ContextType,
                m_Config.Database.ServerName,
                m_Config.Database.DatabaseName,
                forcedSeedingDisabled);

            if (forcedSeedingDisabled)
            {
                return;
            }

            var seederType = InitializerInfo.Initializer.GetType()
                .GetGenericArguments()
                .SingleOrDefault(at => at.GetInterfaces()
                    .Any(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof (ISeedData<>)));

            if (seederType != null)
            {
                Log.Information(
                    "Performing data seeding for {contextType} using seed {seederType} on {endPointServer}\\{endpointDatabase}",
                    InitializerInfo.ContextType,
                    seederType,
                    m_Config.Database.ServerName,
                    m_Config.Database.DatabaseName);

                using (var targetContext = (DbContext) Activator.CreateInstance(InitializerInfo.ContextType))
                {
                    if (InitializerInfo.Initializer != null)
                    {
                        // shut off the initializer as we are only doing seeding now (regardless of mode)
                        Log.Debug("Setting Database Initializer to null before seeding.");
                        typeof(Database).GetMethod("SetInitializer")
                            .MakeGenericMethod(InitializerInfo.ContextType)
                            .Invoke(null, new object[] { null });
                    }

                    targetContext.Database.Connection.ConnectionString =
                        m_ConnectionInfoBuilder.BuildConnectionString(m_Config.Database, m_Config.AuthMode, m_Config.SqlLogin, m_Config.SqlPassword);

                    var dataSeeder = Activator.CreateInstance(seederType);
                    seederType.GetMethod("Seed").Invoke(dataSeeder, new object[] {targetContext});
                }
            }
            else
            {
                Log.Information(
                    "No seed data specified on {initializer} for {contextType} on {endPointServer}\\{endpointDatabase}",
                    InitializerInfo.Initializer,
                    InitializerInfo.ContextType,
                    m_Config.Database.ServerName,
                    m_Config.Database.DatabaseName);
            }
        }