Skip to content

Mysql CodeFirst 主键是Guid的情况下 希望能还有个非主键的自增字段 #498

Closed
@ApexFly

Description

@ApexFly

项目需求,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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions