主键Id自增,如何获取Id(Dapper)

这里用的是Dapper,以前用EF的时候好像有用到过db.savechanges(). 但是项目中没有这个,所以用以下的方法去获取id

背景:涉及到多表入库,需要获取主表的Id,所以用到了这个(timeFields  可以忽略)

 

 

  /// <summary>
        /// 单个添加
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <param name="timeFields"></param>
        public int AddBackId<T>(T t, List<string> timeFields = null)
        {
            var sql = GetSql(InsertSql, timeFields);
            if (!sql.EndsWith(";"))
            {
                sql += ";";
            }
            if (!sql.EndsWith("SELECT LAST_INSERT_ID();"))
            {
                sql += "SELECT LAST_INSERT_ID();";
            }
            return DB.Query<int>(sql, t).FirstOrDefault();
        }

  private string GetSql(string oSql, IEnumerable<string> timeFields = null)
        {
            var fields = new List<string>();
            fields.AddRange(TimeFields);
            if (timeFields != null && timeFields.Any())
            {
                fields.AddRange(timeFields.Where(x => !TimeFields.Contains(x)));
            }

            var sql = oSql;
            if (fields.Any())
            {
                foreach (var field in fields)
                {
                    sql = sql.Replace($"@{field}", $"IF(@{field} = '0001-01-01 00:00:00', NULL, @{field})");
                }
            }
            return sql;
        }

 

 

 

posted @ 2024-07-03 10:28  苏苏苏en  阅读(42)  评论(0编辑  收藏  举报