zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    27、BLASTN的参数
    6、R语言绘制带errorbar 的柱状图
    26、HDF5 文件格式简介
    25、转录本(transcript)组成(gtf文件的第三列)
    6、perl创建模块(Exporter)及路径 引用 嵌套 查询模块
    24、嵌合体序列Chimeras
    24、sam- 详解
    22、IDP-ASE
    21 、GPD-PSL-VCF
    EasyUI 中easyui-textbox和easyui-searchbox文本框的点击事件。
  • 原文地址:https://www.cnblogs.com/xytmj/p/7606769.html
Copyright © 2011-2022 走看看