/// <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); }
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); }
/// <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); }
/// <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); }
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)); }
/// <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); }
/// <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); }
/// <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); }
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); }
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); }
/// <summary> /// 添加用户定义列。 /// </summary> /// <param name="builder">用户表格定义实例。</param> protected override void Create(CreateTableBuilder <TUser> builder) { builder.Column(x => x.SiteId); }
/// <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); }
/// <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 }); }
/// <summary> /// 添加表格列。 /// </summary> /// <param name="table">表格构建实例。</param> protected override void Create(CreateTableBuilder <TCategory> table) { table.Column(x => x.ParentId); }
/// <summary> /// 添加网站域名列。 /// </summary> /// <param name="table">构建表格实例。</param> protected virtual void Create(CreateTableBuilder <SiteDomain> table) { }
/// <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); }
/// <summary> /// 添加用户定义列。 /// </summary> /// <param name="builder">用户表格定义实例。</param> protected virtual void Create(CreateTableBuilder <TUser> builder) { }
/// <summary> /// 编辑表格其他属性列。 /// </summary> /// <param name="table">当前表格构建实例对象。</param> protected virtual void Create(CreateTableBuilder <TCategory> table) { }
/// <summary> /// 添加模型对象。 /// </summary> /// <param name="table">添加表格的构建实例对象。</param> protected abstract void Create(CreateTableBuilder <TModel> table);
/// <summary> /// 添加列。 /// </summary> /// <param name="table">表格构建实例。</param> protected abstract void Create(CreateTableBuilder <TObject> table);
/// <summary> /// 添加网站信息实例列。 /// </summary> /// <param name="table">构建表格实例。</param> protected virtual void Create(CreateTableBuilder <SiteAdapter> table) { }
/// <summary> /// 编辑表格其他属性列。 /// </summary> /// <param name="table">当前表格构建实例对象。</param> protected virtual void Create(CreateTableBuilder <TGroup> table) { }
/// <summary> /// 编辑表格其他属性列。 /// </summary> /// <param name="table">当前表格构建实例对象。</param> protected override void Create(CreateTableBuilder <NamedString> table) { table.Column(x => x.Value); }