• MySql主键自动生成,表、实体、C#调用方法


    1.表:mysql建表语句

    DROP TABLE IF EXISTS `keycode`;
    CREATE TABLE `keycode` (
    `Id` int(11) NOT NULL AUTO_INCREMENT,
    `KeyName` varchar(50) NOT NULL,
    `KeyRemark` varchar(100) NOT NULL,
    `Prefix` varchar(20) DEFAULT NULL,
    `ReSetType` int(11) NOT NULL,
    `DateFormat` longtext,
    `Length` int(11) NOT NULL,
    `Step` int(11) NOT NULL,
    `InitialValue` int(11) NOT NULL,
    `NowDate` longtext,
    `CurrentValue` int(11) NOT NULL
    PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

    2.实体:Entity

    /// <summary>
    /// 自动生成不重复流水号
    /// </summary>
    public class KeyCode
    {
    /// <summary>
    /// 键名称
    /// </summary>
    [Required, MaxLength(50)]
    public string KeyName { get; set; }
    
    /// <summary>
    /// 键说明
    /// </summary>
    [Required, MaxLength(100)]
    public string KeyRemark { get; set; }
    
    /// <summary>
    /// 前标字母
    /// </summary>
    [MaxLength(20)]
    public string Prefix { get; set; }
    
    /// <summary>
    /// 重置类型:0不重置 1重置
    /// </summary>
    public int ReSetType { get; set; }
    
    /// <summary>
    /// 日期格式 日期格式格式可以是yyyymm,yy-mm,yyyymmdd,yyyymmdd-hh等,
    /// 如果按年重置,则日期格式中必须有年,如果按月重置,则日期格式中必须有月.
    /// 如果日期格式为空:则编号中不加入日期字段
    /// </summary>
    public string DateFormat { get; set; }
    
    /// <summary>
    /// 流水号长度:如长度为4,当前流水号为123,则出来的编码为0123,不足4位的前面补0
    /// </summary>
    public int Length { get; set; }
    
    /// <summary>
    /// 步长 每个流水号生成间隔是多少,如2,表示每个生成0001,0003这种流水号';
    /// </summary>
    public int Step { get; set; }
    
    /// <summary>
    /// 初始值 初始流水号是多少,默认是0
    /// </summary>
    public int InitialValue { get; set; }
    
    /// <summary>
    /// 当前使用的日期【需更新】
    /// </summary>
    public string NowDate { get; set; }
    
    /// <summary>
    /// 当前流水号【需更新】 流水号当前值,如234表示当前的流水号生成到了234,下一个为234+STEP(步长)';
    /// </summary>
    public int CurrentValue { get; set; }
    
    }

    3.C#调用方法

    /// <summary>
    /// 不重复编码生成
    /// </summary>
    /// <param name="keyName"></param>
    /// <returns></returns>
    public string GetKeyCode(string keyName)
    {
    string returnKey = "";
    KeyCode key = _keyRepository.FirstOrDefault(k => k.KeyName == keyName);
    //步长
    int step = key.Step <= 0 ? 1 : key.Step;
    
    //如果日期格式化为空:表示编码不需要日期
    if (string.IsNullOrEmpty(key.DateFormat))
    key.NowDate = "";
    else
    key.NowDate = DateTime.Now.ToString(key.DateFormat);
    
    //重置类型: 0不重置,1重置
    //不重置:后面序号一直增加,不按年月日重置
    if (key.ReSetType == 0)
    key.CurrentValue = key.CurrentValue <= 0 ? 1 : (key.CurrentValue + step);
    //重置:年月日变化时,会重新从1开始
    else
    {
    //如果日期不一样了,序号从1开始
    if (!string.IsNullOrEmpty(key.NowDate) &&key.NowDate != DateTime.Now.ToString(key.DateFormat))
    key.CurrentValue = key.InitialValue <= 0 ? 0 : key.InitialValue;
    //否则,序号从原序号+step
    else
    key.CurrentValue = key.CurrentValue <= 0 ? 1 : (key.CurrentValue + step);
    }
    
    //更新当前值为新的值;
    _keyRepository.Update(key);
    //拼接编码
    string newCode = key.CurrentValue.ToString().PadLeft(key.Length, '0');
    returnKey = key.Prefix + key.NowDate + newCode;
    return returnKey;
    }
  • 相关阅读:
    Win8metro外包团队:专业承接Windows 8 metro应用外包,基于HTML5、Silverlight、.NET均可
    WPF性能优化经验总结和整理综合帖
    WPF外包—WPF案例分享—WPF实现的又一个阅读器MSDN Reader
    中国已成为亚太区企业首选的外包基地
    Acer北京维修站汇总(今天电脑坏了去维修,顺便分享一下)
    WPF外包公司——北京动点飞扬软件联系方式和官方博客地址
    微软首推msnNOW服务 网络社交化风暴愈演愈烈
    WPF外包就找北京动点飞扬软件:WPF 4.5探秘之三 Dispatcher的新方法
    微软发布Windows 8标志:彰显创新回归本源(图)
    中国软件产业发展全国数据对比
  • 原文地址:https://www.cnblogs.com/xytmj/p/7606769.html
Copyright © 2020-2023  润新知