示例#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)));
        }
 /// <summary>
 /// 添加模型对象。
 /// </summary>
 /// <param name="table">添加表格的构建实例对象。</param>
 protected override void Create(CreateTableBuilder <Archive> table)
 {
     table.Column(x => x.Title)
     .Column(x => x.SubTitle)
     .Column(x => x.HLogo)
     .Column(x => x.VLogo)
     .Column(x => x.Description)
     .Column(x => x.CommentId)
     .Column(x => x.Comments)
     .Column(x => x.EnabledComment)
     .Column(x => x.Views)
     .Column(x => x.TodayViews)
     .Column(x => x.WeekViews)
     .Column(x => x.MonthViews)
     .Column(x => x.VScore)
     .Column(x => x.Voters)
     .Column(x => x.Body)
     .Column(x => x.TagIndexed)
     .Column(x => x.Tags)
     .Column(x => x.Source)
     .Column(x => x.SourceTitle)
     .Column(x => x.SourceUrl)
     .Column(x => x.Author)
     .Column(x => x.AuthorId)
     .Column(x => x.Favorites)
     .Column(x => x.CategoryId)
     .Column(x => x.IsSearchIndexed);
 }
示例#3
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);
        }
 protected override void Create(CreateTableBuilder <Project> table)
 {
     table.Column(x => x.Name)
     .Column(x => x.Summary)
     .Column(x => x.UserId)
     .Column(x => x.Enabled)
     .Column(x => x.CreatedDate);
 }
示例#5
0
 /// <summary>
 /// 添加用户定义列。
 /// </summary>
 /// <param name="builder">用户表格定义实例。</param>
 protected override void Create(CreateTableBuilder <User> builder)
 {
     builder.Column(x => x.Country)
     .Column(x => x.Province)
     .Column(x => x.City)
     .Column(x => x.Address)
     .Column(x => x.Tags)
     .Column(x => x.Signature);
 }
示例#6
0
 /// <summary>
 /// 添加表格列。
 /// </summary>
 /// <param name="table">表格构建实例。</param>
 protected override void Create(CreateTableBuilder <Channel> table)
 {
     base.Create(table);
     table.Column(x => x.IconName)
     .Column(x => x.ClassName)
     .Column(x => x.DisplayName)
     .Column(x => x.LinkUrl)
     .Column(x => x.LinkTarget)
     .Column(x => x.Priority)
     .Column(x => x.Disabled);
 }
示例#7
0
        public void get_col_by_index()
        {
            var b = new CreateTableBuilder(Setup.GetDb(), new DDLStub(), "bla", IfTableExists.Throw);

            Assert.Throws <KeyNotFoundException>(() => b.Columns["id"]);

            b.Columns.Add("id", DbType.Int32);
            b.Columns["id"].IfDatabaseIs(DbEngine.SqlServer).RedefineColumnAs("bla");
            Assert.True(b.Table.Columns["id"].IsRedefined(DbEngine.SqlServer));
            Assert.Equal("bla", b.Table.Columns["id"].GetDefinition(DbEngine.SqlServer));
        }
示例#8
0
 /// <summary>
 /// 编辑表格其他属性列。
 /// </summary>
 /// <param name="table">当前表格构建实例对象。</param>
 protected override void Create(CreateTableBuilder <Group> table)
 {
     base.Create(table);
     table.Column(x => x.Key)
     .Column(x => x.IconUrl)
     .Column(x => x.UserId)
     .Column(x => x.Tags)
     .Column(x => x.Description)
     .Column(x => x.Projects)
     .Column(x => x.Users)
     .Column(x => x.CreatedDate);
 }
 /// <summary>
 /// 编辑表格其他属性列。
 /// </summary>
 /// <param name="table">当前表格构建实例对象。</param>
 protected override void Create(CreateTableBuilder <Milestone> table)
 {
     table.Column(x => x.UserId)
     .Column(x => x.Completed)
     .Column(x => x.CompletedDate)
     .Column(x => x.CreatedDate)
     .Column(x => x.Issues)
     .Column(x => x.Operator)
     .Column(x => x.ProjectId)
     .Column(x => x.StartDate)
     .Column(x => x.Summary);
 }
示例#10
0
 /// <summary>
 /// 添加列。
 /// </summary>
 /// <param name="table">表格构建实例。</param>
 protected override void Create(CreateTableBuilder <Project> table)
 {
     table.Column(x => x.Key)
     .Column(x => x.Name)
     .Column(x => x.IconUrl)
     .Column(x => x.Tags)
     .Column(x => x.Description)
     .Column(x => x.GroupId, defaultValue: 0)
     .Column(x => x.CreatedDate)
     .Column(x => x.UpdatedDate)
     .Column(x => x.ExtendProperties)
     .ForeignKey <Group>(x => x.GroupId, x => x.Id, onDelete: ReferentialAction.SetDefault);
 }
示例#11
0
        /// <summary>
        /// 新建表格。
        /// </summary>
        /// <typeparam name="TEntity">表格实体类型。</typeparam>
        /// <param name="action">表格列定义表达式。</param>
        /// <returns>返回当前构建实例。</returns>
        public virtual CreateTableBuilder <TEntity> CreateTable <TEntity>(Action <CreateTableBuilder <TEntity> > action)
        {
            Check.NotNull(action, nameof(action));

            var createTableOperation = new CreateTableOperation
            {
                Table = typeof(TEntity).GetTableName()
            };

            var builder = new CreateTableBuilder <TEntity>(createTableOperation);

            action(builder);
            if (createTableOperation.PrimaryKey == null)
            {
                builder.PrimaryKey();
            }

            Operations.Add(createTableOperation);

            return(builder);
        }
示例#12
0
        public virtual CreateTableBuilder <TColumns> CreateTable <TColumns>(
            [NotNull] string name,
            [NotNull] Func <ColumnsBuilder, TColumns> columns,
            [CanBeNull] string schema = null,
            [CanBeNull] Action <CreateTableBuilder <TColumns> > constraints = null)
        {
            Check.NotEmpty(name, nameof(name));
            Check.NotNull(columns, nameof(columns));

            var createTableOperation = new CreateTableOperation
            {
                Schema = schema,
                Name   = name
            };

            var columnsBuilder = new ColumnsBuilder(createTableOperation);
            var columnsObject  = columns(columnsBuilder);
            var columnMap      = new Dictionary <PropertyInfo, AddColumnOperation>();

            foreach (var property in typeof(TColumns).GetTypeInfo().DeclaredProperties)
            {
                var addColumnOperation = ((IAccessor <AddColumnOperation>)property.GetMethod.Invoke(columnsObject, null)).Service;
                if (addColumnOperation.Name == null)
                {
                    addColumnOperation.Name = property.Name;
                }
                columnMap.Add(property, addColumnOperation);
            }

            var builder = new CreateTableBuilder <TColumns>(createTableOperation, columnMap);

            if (constraints != null)
            {
                constraints(builder);
            }

            Operations.Add(createTableOperation);

            return(builder);
        }
示例#13
0
        public static CreateTableBuilder <TColumns> AppendColumns <TColumns>(this CreateTableOperation createTableOperation, Func <ColumnsBuilder, TColumns> columns, Action <CreateTableBuilder <TColumns> > constraints = null)
        {
            var columnsBuilder = new ColumnsBuilder(createTableOperation);

            var columnsObject = columns(columnsBuilder);
            var columnMap     = new Dictionary <PropertyInfo, AddColumnOperation>();

            foreach (var property in typeof(TColumns).GetTypeInfo().DeclaredProperties)
            {
                var addColumnOperation = ((IInfrastructure <AddColumnOperation>)property.GetMethod.Invoke(columnsObject, null)).Instance;
                if (addColumnOperation.Name == null)
                {
                    addColumnOperation.Name = property.Name;
                }

                columnMap.Add(property, addColumnOperation);
            }

            var builder = new CreateTableBuilder <TColumns>(createTableOperation, columnMap);

            constraints?.Invoke(builder);

            return(builder);
        }
示例#14
0
 /// <summary>
 /// 添加用户定义列。
 /// </summary>
 /// <param name="builder">用户表格定义实例。</param>
 protected override void Create(CreateTableBuilder <TUser> builder)
 {
     builder.Column(x => x.SiteId);
 }
示例#15
0
 /// <summary>
 /// 添加列。
 /// </summary>
 /// <param name="table">表格构建实例。</param>
 protected override void Create(CreateTableBuilder <TGroup> table)
 {
     table.Column(x => x.SiteId)
     .Column(x => x.ParentId)
     .UniqueConstraint(x => new { x.SiteId, x.ParentId, x.Name });
 }
 /// <summary>
 /// 编辑表格其他属性列。
 /// </summary>
 /// <param name="table">当前表格构建实例对象。</param>
 protected override void Create(CreateTableBuilder <EventType> table)
 {
     table.Column(x => x.BgColor).Column(x => x.Color).Column(x => x.IconUrl);
 }
示例#17
0
 /// <summary>
 /// 添加列。
 /// </summary>
 /// <param name="table">表格构建实例。</param>
 protected override void Create(CreateTableBuilder <TCategory> table)
 {
     table.Column(x => x.Name)
     .UniqueConstraint(x => new { x.SiteId, x.Name });
 }
示例#18
0
 /// <summary>
 /// 添加表格列。
 /// </summary>
 /// <param name="table">表格构建实例。</param>
 protected override void Create(CreateTableBuilder <TCategory> table)
 {
     table.Column(x => x.ParentId);
 }
示例#19
0
 /// <summary>
 /// 添加网站域名列。
 /// </summary>
 /// <param name="table">构建表格实例。</param>
 protected virtual void Create(CreateTableBuilder <SiteDomain> table)
 {
 }
示例#20
0
 /// <summary>
 /// 编辑表格其他属性列。
 /// </summary>
 /// <param name="table">当前表格构建实例对象。</param>
 protected override void Create(CreateTableBuilder <NotificationType> table)
 {
     table.Column(x => x.IconUrl)
     .Column(x => x.Color);
 }
 /// <summary>
 /// 添加其他列。
 /// </summary>
 /// <param name="table">表格构建实例。</param>
 protected override void Create(CreateTableBuilder <TUserActivity> table)
 {
     table.Column(x => x.SiteId);
 }
示例#22
0
 /// <summary>
 /// 添加用户定义列。
 /// </summary>
 /// <param name="builder">用户表格定义实例。</param>
 protected virtual void Create(CreateTableBuilder <TUser> builder)
 {
 }
示例#23
0
 /// <summary>
 /// 编辑表格其他属性列。
 /// </summary>
 /// <param name="table">当前表格构建实例对象。</param>
 protected virtual void Create(CreateTableBuilder <TCategory> table)
 {
 }
示例#24
0
 /// <summary>
 /// 添加模型对象。
 /// </summary>
 /// <param name="table">添加表格的构建实例对象。</param>
 protected abstract void Create(CreateTableBuilder <TModel> table);
示例#25
0
 /// <summary>
 /// 添加列。
 /// </summary>
 /// <param name="table">表格构建实例。</param>
 protected abstract void Create(CreateTableBuilder <TObject> table);
示例#26
0
 /// <summary>
 /// 添加网站信息实例列。
 /// </summary>
 /// <param name="table">构建表格实例。</param>
 protected virtual void Create(CreateTableBuilder <SiteAdapter> table)
 {
 }
示例#27
0
 /// <summary>
 /// 编辑表格其他属性列。
 /// </summary>
 /// <param name="table">当前表格构建实例对象。</param>
 protected virtual void Create(CreateTableBuilder <TGroup> table)
 {
 }
示例#28
0
 /// <summary>
 /// 编辑表格其他属性列。
 /// </summary>
 /// <param name="table">当前表格构建实例对象。</param>
 protected override void Create(CreateTableBuilder <NamedString> table)
 {
     table.Column(x => x.Value);
 }