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()]
public string KeyName { get; set; } /// <summary>
/// 键说明
/// </summary>
[Required, MaxLength()]
public string KeyRemark { get; set; } /// <summary>
/// 前标字母
/// </summary>
[MaxLength()]
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 <= ? : key.Step; //如果日期格式化为空:表示编码不需要日期
if (string.IsNullOrEmpty(key.DateFormat))
key.NowDate = "";
else
key.NowDate = DateTime.Now.ToString(key.DateFormat); //重置类型: 0不重置,1重置
//不重置:后面序号一直增加,不按年月日重置
if (key.ReSetType == )
key.CurrentValue = key.CurrentValue <= ? : (key.CurrentValue + step);
//重置:年月日变化时,会重新从1开始
else
{
//如果日期不一样了,序号从1开始
if (!string.IsNullOrEmpty(key.NowDate) &&key.NowDate != DateTime.Now.ToString(key.DateFormat))
key.CurrentValue = key.InitialValue <= ? : key.InitialValue;
//否则,序号从原序号+step
else
key.CurrentValue = key.CurrentValue <= ? : (key.CurrentValue + step);
} //更新当前值为新的值;
_keyRepository.Update(key);
//拼接编码
string newCode = key.CurrentValue.ToString().PadLeft(key.Length, '');
returnKey = key.Prefix + key.NowDate + newCode;
return returnKey;
}

MySql主键自动生成,表、实体、C#调用方法的更多相关文章

  1. PowerDesigner 15设置mysql主键自动增长及基数

    PowerDesigner 15设置mysql主键自动增长及基数 1.双击标示图,打开table properties->columns,  如图点击图标Customize Columns an ...

  2. hibernate主键自动生成

    Entity类中,主键尽量使用可以为null值的类型,比如Integer,Long,String等,不要用int,long等.因为如果主键为null,则表示该实体类还没有保存到数据库,是一个临时状态( ...

  3. MYSQL主键自动增加的配置及auto_increment注意事项

    文章一 原文地址: http://ej38.com/showinfo/mysql-202971.html 文章二:   点击转入第二篇文章 在数据库应用,我们经常要用到唯一编号.在MySQL中可通过字 ...

  4. Mybatis「MySQL-Oracle」 中主键自动生成 <selectKey> 序列化

    有时候我们不仅仅是通过返回 int 影响行数来确定数据是否插入成功就行了,因为我们总是会用到这个刚刚插入的自增主键,比如主子表入库,子表需要主表的 id,那这个时候我们再去数据库查就显得有点 low ...

  5. SQL Server主键自动生成_表and存储过程

    主键表: CREATE TABLE [dbo].[KEYCODE]( [KeyName] [varchar](12) NOT NULL, [KeyTableName] [varchar](40) NU ...

  6. Entity Framework Code First 遭遇主键自动生成问题

    4.0后就没有去跟踪后面的版本了.现在直接开始用5.0没想到在做User的GURD时就遭遇insert不进数据问题. ISet<User>.Add(user);_context.SaveC ...

  7. mysql——主键自动增长&唯一索引

    首先说一下主键和唯一索引的区别 主键:一个数据库的一张表有且仅有一个主键,而且主键不能重复 唯一索引:一个数据库的一张表上唯一索引可以有多个,只是所在唯一索引上的值不能重复,这一点和主键一样 下面我们 ...

  8. Oracle主键自动生成_表and存储过程

    -- Create table create table T_EB_SYS_DN_SEQUENCE_CONFIG ( sequence_id VARCHAR2(36) default sys_guid ...

  9. springboot 使用JPA自动生成Entity实体类的方法

    1. 2. 3.添加数据库 4. 5. 6. 7.点击OK完成. 8.去掉红色波浪线方法. 9.配置数据源 完成!

随机推荐

  1. Linux - ubuntu vMwareTools安装

    ubuntu vMwareTools安装 不安装很麻烦,虚拟机中的内容,包括文件.无法复制到pc端.同样的pc端的内容也无法复制到虚拟机中. 1.点击虚拟机,选择安装VMwareTools 这个时候就 ...

  2. python3 第十九章 - 写一个10进制转任意进制的函数

    我们先回忆下之前所学的进制转换的知识(详见:第十章),10进制转其它进制的方法是: 整数部分,除基取余,逆序排列 小数部分,乘基取整,顺序排列 负数,按绝对值处理 好,假设我们需要转化的数都是正整数, ...

  3. python3 第四章 - 输入与输出

    1.输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字. print('hello, world') 输入以上代码,执行后输出: hello, world 事实上,任何基本类型都可 ...

  4. Servlet--继承HttpServlet写自己的Servlet

    前面2篇关注的都是Servlet接口,在实际编码中一般不直接实现这个接口,而是继承HttpServlet类.因为j2e的包里面写好了GenericServlet和HttpServlet类来让我们简化编 ...

  5. ios GCD将异步转换为同步

    在开发中有时需要等网络请求完成之后拿到数据做一些操作,而且有时是同时好几个网络请求同时发起.这时会有对异步操作进行更进一步控制的场景,不单网络请求,有时一些其他本地文件,多张图片处理等可能都会遇到这种 ...

  6. 仿百度糯米TP5项目笔记

    需求分析 系统三大模块 商家平台.主平台.前台模块 Thinkphp5.0实战 仿百度糯米开发多商家电商平台网盘下载 (2017-04-24 01:46:23) 转载▼     第1章 课程简介 本章 ...

  7. pat 1022 digital library

    #include <iostream> #include <sstream> #include <string> #include <vector> # ...

  8. 认识Webpack

    认识Webpack   网上已经有不少Webpack教程入门教程了. 本文记录了我以我的方式方法.思路认识了解Webpack.从官方的Tutorial入手,不断提出问题.解决,一步一步认识Webpac ...

  9. [codility] Lession1 - Iterations - BinaryGap

    Task1: A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is ...

  10. Ajax异步信息抓取方式

    淘女郎模特信息抓取教程 源码地址: cnsimo/mmtao 网址:https://0x9.me/xrh6z   判断一个页面是不是Ajax加载的方法: 查看网页源代码,查找网页中加载的数据信息,如果 ...