主键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; }