代替数据库的自增主键的解决方案,解决了批量导数据ID出错的问题

namespace Entity
{
    /// <summary>
    /// 自定义主键编码
    /// </summary>
    public enum PkIdRecordCode
    {
        /// <summary>
        /// OrderID
        /// </summary>
        OR = 10,
        /// <summary>
        /// ProductID
        /// </summary>
        PR = 30,
        /// <summary>
        /// StoreID
        /// </summary>
        ST = 40,
        /// <summary>
        /// UserID
        /// </summary>
        US = 20,
    }
    /// <summary>
    /// 含有自增主键性质的表枚举
    /// </summary>
    public enum PKIDTable
    {
        /// <summary>
        ///     地区信息
        /// </summary>
        Areas = 1,
        /// <summary>
        ///   银行信息
        /// </summary>
        BankInfos = 2,
        /// <summary>
        /// 商品虚拟分类属性
        /// </summary>
        CategoryPropertys = 3,

    }

}

        /// <summary>
        /// 代替数据库的自增主键的解决方案,解决了批量导数据ID出错的问题
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public int GetNewPKID(Entity.PKIDTable code) //由后后台也要建立用户,所以把它改为public -zhangzhanling
        {
            string _code = null;

            int idNum = 0;
            using (TransactionScope transactionScope = new TransactionScope())
            {
                try
                {
                    _code = Enum.GetName(typeof(Entity.PKIDTable), code);
                    idNum = base._db.ExecuteQuery<int>("UPDATE PkIdTable SET IDNum= IDNum+1 WHERE Code={0};select IDNum from PkIdTable WHERE Code = {0}", _code).Single();
                    transactionScope.Complete();
                    transactionScope.Dispose();
                    return idNum;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    transactionScope.Dispose();
                }
            }
        }
      
  /// <summary>
        /// 一些特殊的主键,需要有固定的位数,当位数的数字不够时,在前面补0
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public string GetNewID(Entity.PkIdRecordCode code) //由后后台也要建立用户,所以把它改为public -zhangzhanling
        {
            string _code = null;

            int idNum = 0;
            using (TransactionScope transactionScope = new TransactionScope())
            {
                try
                {
                    _code = Enum.GetName(typeof(Entity.PkIdRecordCode), code);
                    idNum = base._db.ExecuteQuery<int>("UPDATE PkIdRecords SET IDNum= IDNum+1 WHERE Code={0};select IDNum from PkIdRecords WHERE Code = {0}", _code).Single();
                    transactionScope.Complete();
                    transactionScope.Dispose();
                    return string.Format("{0}{1}", (int)code, idNum.ToString().PadLeft(6, '0'));
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    transactionScope.Dispose();
                }
            }
        }

数据库结构

posted @   张占岭  阅读(879)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示