/// <summary> /// Generates and execute the table creation sql using the specified poco as the table representation /// </summary> /// <typeparam name="T"></typeparam> /// <param name="db"></param> /// <param name="cfg"></param> public static void CreateTableFrom <T>(this DbConnection db, Action <IConfigureTable <T> > cfg) { var provider = db.Provider(); var tcfg = new TableConfigurator <T>(provider); cfg(tcfg); var data = tcfg.Data; var info = db.GetPocoInfo <T>(); data.Update(info); var builder = new CreateTableBuilder(provider); if (db.TableExists <T>()) { switch (tcfg.Data.CreationOptions) { case TableExistsAction.Throw: throw new TableExistsException(tcfg.Data.TableName); case TableExistsAction.DropIt: db.DropTable <T>(); break; case TableExistsAction.Ignore: return; } } db.Execute(c => c.Sql(builder.GetSql(tcfg.Data))); }
public void test() { var table = new CreateTableBuilder(Config.GetDb(), _ddl, "bla", IfTableExists.Ignore); table.Columns .Add("Id", DbType.Int32, isNullable: false, autoIncrement: true) .Add("Name", DbType.String, size: "50") .IfDatabaseIs(DbEngine.SqlServer).SetColumnOptions(SqlServerOptions.ColumnIs.Sparse()) .Add("ParentId", DbType.Int32, isNullable: false) .Add("Uid", DbType.Guid) ; table.Constraints.AddPrimaryKeyOn("Id") .IfDatabaseIs(DbEngine.SqlServer) .PrimaryKeyOptions(SqlServerOptions.PrimaryKeyIs.Clustered()); table.Constraints.AddForeignKeyOn("ParentId", "users", "Id", onDelete: ForeignKeyRelationCascade.Cascade); table.Constraints.AddCheck("Name like 'a%'", "CK_bla_name"); table.Indexes.AddIndexOn("Name", true, "ix_name") .IfDatabaseIs(DbEngine.SqlServer) .SetOptions(SqlServerOptions.Index.NonClustered()); var s = table.GetSql(); Write(s); }