private static void PetaPocoExtensions_NewTable(string tableName, Database db, TableCreationEventArgs e) { var baseDataCreation = new BaseDataCreation(db); baseDataCreation.InitializeBaseData(tableName); }
public static void CreateTable(this Database db, bool overwrite, Type modelType) { var tableDefinition = DefinitionFactory.GetTableDefinition(modelType); var tableName = tableDefinition.Name; string createSql = SqlSyntaxContext.SqlSyntaxProvider.Format(tableDefinition); string createPrimaryKeySql = SqlSyntaxContext.SqlSyntaxProvider.FormatPrimaryKey(tableDefinition); var foreignSql = SqlSyntaxContext.SqlSyntaxProvider.Format(tableDefinition.ForeignKeys); var indexSql = SqlSyntaxContext.SqlSyntaxProvider.Format(tableDefinition.Indexes); var tableExist = db.TableExist(tableName); if (overwrite && tableExist) { db.DropTable(tableName); } if (tableExist == false) { using (var transaction = db.GetTransaction()) { //Execute the Create Table sql int created = db.Execute(new Sql(createSql)); LogHelper.Info <Database>(string.Format("Create Table sql {0}:\n {1}", created, createSql)); //If any statements exists for the primary key execute them here if (!string.IsNullOrEmpty(createPrimaryKeySql)) { int createdPk = db.Execute(new Sql(createPrimaryKeySql)); LogHelper.Info <Database>(string.Format("Primary Key sql {0}:\n {1}", createdPk, createPrimaryKeySql)); } //Fires the NewTable event, which is used internally to insert base data before adding constrants to the schema if (NewTable != null) { var e = new TableCreationEventArgs(); //Turn on identity insert if db provider is not mysql if (SqlSyntaxContext.SqlSyntaxProvider.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity)) { db.Execute(new Sql(string.Format("SET IDENTITY_INSERT {0} ON ", SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName)))); } //Call the NewTable-event to trigger the insert of base/default data NewTable(tableName, db, e); //Turn off identity insert if db provider is not mysql if (SqlSyntaxContext.SqlSyntaxProvider.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity)) { db.Execute(new Sql(string.Format("SET IDENTITY_INSERT {0} OFF;", SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName)))); } //Special case for MySql if (SqlSyntaxContext.SqlSyntaxProvider is MySqlSyntaxProvider && tableName.Equals("umbracoUser")) { db.Update <UserDto>("SET id = @IdAfter WHERE id = @IdBefore AND userLogin = @Login", new { IdAfter = 0, IdBefore = 1, Login = "******" }); } } //Loop through foreignkey statements and execute sql foreach (var sql in foreignSql) { int createdFk = db.Execute(new Sql(sql)); LogHelper.Info <Database>(string.Format("Create Foreign Key sql {0}:\n {1}", createdFk, sql)); } //Loop through index statements and execute sql foreach (var sql in indexSql) { int createdIndex = db.Execute(new Sql(sql)); LogHelper.Info <Database>(string.Format("Create Index sql {0}:\n {1}", createdIndex, sql)); } transaction.Complete(); } } LogHelper.Info <Database>(string.Format("New table '{0}' was created", tableName)); }