public void Deploy()
{
ValidateConfiguredAssemblies();
var isPerformInitialization = m_Config.Mode == DeploymentMode.InitializeOnly ||
m_Config.Mode == DeploymentMode.InitializeOrMigrate;
var isPerformMigration = m_Config.Mode != DeploymentMode.InitializeOnly &&
m_Config.Mode != DeploymentMode.SeedOnly;
TransactionScope multiMigrationTxScope = null;
try
{
MigrationExecutionInfo pendingMigration = null;
if (isPerformMigration)
{
pendingMigration = GetPendingMigration();
isPerformMigration = (pendingMigration != null);
}
var isInitializationPerformed = isPerformInitialization && HandleDatabaseInitialization();
if (isPerformMigration && pendingMigration.Migration.ContextKeySchema != null)
{
SetupDeploymentHistory(pendingMigration.Migration.ContextKeySchema.SchemaName);
}
else if (isPerformInitialization)
{
var contextKeySchema = GetTargetAssemblyContextKeySchema();
SetupDeploymentHistory(contextKeySchema.SchemaName);
}
if (m_Config.RunServerMigrationsInTransaction)
{
multiMigrationTxScope = new TransactionScope(TransactionScopeOption.Required);
}
if (isPerformMigration)
{
var isMigrationPerformed = HandleDatabaseMigration(pendingMigration);
if (isMigrationPerformed)
{
HandleDeploymentHistory(
pendingMigration.Migration.ContextKeySchema.SchemaName,
pendingMigration.Migration.ContextKeySchema.ContextKey);
}
}
else if (isInitializationPerformed)
{
var contextKeySchema = GetTargetAssemblyContextKeySchema();
HandleDeploymentHistory(contextKeySchema.SchemaName, contextKeySchema.ContextKey);
}
multiMigrationTxScope?.Complete();
if (!isInitializationPerformed)
{
HandleDataSeeding();
}
}
finally
{
multiMigrationTxScope.SafeDispose();
}
}