Пример #1
0
        /// <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)));
        }
Пример #2
0
        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);
        }