/// <summary> /// 修改指定条件数据的指定字段 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="TPrimaryKey"></typeparam> /// <param name="conn"></param> /// <param name="fieldValueList"> /// 要修改的字段和值对,注意这里的Field是数据表的字段,而不是实体的属性 /// FieldValuePairs.New().Add(字段, 值).Add(...) /// 注意:此方法不会忽略已指定为UpdateIgnore的字段 /// </param> /// <param name="condition"></param> /// <param name="getUserKeyFunc"></param> /// <param name="trans"></param> /// <returns></returns> public static int Set <T, TPrimaryKey>(this SqlConnection conn, FieldValuePairs fieldValueList, ConditionBuilder condition, Func <TPrimaryKey> getUserKeyFunc = null, SqlTransaction trans = null) where T : IBaseEntity <TPrimaryKey> { condition = condition ?? ConditionBuilder.New(); fieldValueList = fieldValueList ?? FieldValuePairs.New(); var info = EntityInfoContainer.Get(typeof(T)); var userId = getUserKeyFunc != null?getUserKeyFunc.Invoke() : default; if (info.IsUpdateAudit) { if (!fieldValueList.Exists(f => f.Field == "UpdateBy")) { fieldValueList.Add("UpdateBy", userId); } if (!fieldValueList.Exists(f => f.Field == "UpdateAt")) { fieldValueList.Add("UpdateAt", DateTime.Now); } } var stringParameter = fieldValueList.Invoke(); var sql = SqlServerSqlBuilder.UpdateByCondition(info, stringParameter.Sql, condition.ToCondition()); stringParameter.Parameters.AddDynamicParams(condition.ToParameters()); return(conn.Execute(sql, stringParameter.Parameters, trans)); }
/// <summary> /// 通过条件更新指定字段 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="fieldValuePairs">字段|值 对</param> /// <param name="condition">条件</param> /// <returns></returns> public int Set <T>(FieldValuePairs fieldValuePairs, ConditionBuilder condition) where T : BaseEntity <TPrimaryKey> { return(ToDo(conn => conn.Set <T, TPrimaryKey>(fieldValuePairs, condition, _getUserKeyFunc))); }