Closed
Description
项目需求,CodeFirst时,主键是Guid的情况下,还能创建一个自增字段。
我将MySqlCodeFirst中创建表的部分做了些改动,满足了我的需求。
但没有对添加/修改列处做调整。这个功能还是希望叶老板能考虑完善下集成进去。
希望FreeSql能更好!!!
代码如下:
//实体需要加索引
/// <summary>
/// 实体模型 主键类型为<see cref="Guid"/>的单个主键的实体,且具有自增序号<see cref="Number"/>属性。
/// </summary>
[Index("{tablename}_uk_number", nameof(Number), true)]
public abstract class EntityNumber : Entity
{
/// <summary>
/// 序号 自动增长
/// </summary>
[Description("序号 自动增长")]
[Column(Position = 2, IsPrimary = false, IsIdentity = true)]
public long Number { get; set; }
}
//创建表
var createTableName = _commonUtils.QuoteSqlName(tbname[0], tbname[1]);
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(createTableName).Append(" ( ");
foreach (var tbcol in tb.ColumnsByPosition)
{
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType);
if (tbcol.Attribute.IsIdentity == true && tbcol.Attribute.DbType.IndexOf("AUTO_INCREMENT", StringComparison.CurrentCultureIgnoreCase) == -1) sb.Append(" AUTO_INCREMENT");
if (string.IsNullOrEmpty(tbcol.Comment) == false) sb.Append(" COMMENT ").Append(_commonUtils.FormatSql("{0}", tbcol.Comment));
sb.Append(",");
}
if (tb.Primarys.Any())
{
sb.Append(" \r\n PRIMARY KEY (");
foreach (var tbcol in tb.Primarys) sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", ");
sb.Remove(sb.Length - 2, 2).Append("),");
}
//创建表的索引 mafeng
foreach (var uk in tb.Indexes)
{
sb.Append(" \r\n ");
if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append("(");
foreach (var tbcol in uk.Columns)
{
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
if (tbcol.IsDesc) sb.Append(" DESC");
sb.Append(", ");
}
sb.Remove(sb.Length - 2, 2).Append("),");
}
sb.Remove(sb.Length - 1, 1);
sb.Append("\r\n) Engine=InnoDB");
if (string.IsNullOrEmpty(tb.Comment) == false)
sb.Append(" Comment=").Append(_commonUtils.FormatSql("{0}", tb.Comment));
sb.Append(";\r\n");
//创建表的索引 mafeng
//foreach (var uk in tb.Indexes)
//{
// sb.Append("CREATE ");
// if (uk.IsUnique) sb.Append("UNIQUE ");
// sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
// foreach (var tbcol in uk.Columns)
// {
// sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
// if (tbcol.IsDesc) sb.Append(" DESC");
// sb.Append(", ");
// }
// sb.Remove(sb.Length - 2, 2).Append(");\r\n");
//}
continue;
Metadata
Metadata
Assignees
Labels
No labels