public override SqlProvider FormatUpdate <T>(T entity) { var update = ResolveExpression.ResolveUpdate <T>(a => entity); var where = ResolveExpression.ResolveWhere(entity); var whereSql = where.SqlCmd; Params = where.Param; Params.AddDynamicParams(update.Param); SqlString = $"UPDATE {FormatTableName(false)} {update.SqlCmd} {whereSql}"; return(this); }
public override SqlProvider FormatUpdate <T>(Expression <Func <T, T> > updateExpression) { var update = ResolveExpression.ResolveUpdate(updateExpression); var where = ResolveExpression.ResolveWhere(Context.Set.WhereExpression); var whereSql = where.SqlCmd; Params = where.Param; Params.AddDynamicParams(update.Param); SqlString = $"UPDATE {FormatTableName(false)} {update.SqlCmd} {whereSql}"; return(this); }
public override SqlProvider FormatUpdateSelect <T>(Expression <Func <T, T> > updator) { var keyField = ProviderOption.CombineFieldName(typeof(T).GetKeyPropertity().GetColumnAttributeName()); var update = ResolveExpression.ResolveUpdate(updator); var selectSql = ResolveExpression.ResolveSelect(typeof(T).GetProperties(), SelectExpression, false); var where = ResolveExpression.ResolveWhere(WhereExpression); var whereSql = where.SqlCmd; Params = where.Param; Params.AddDynamicParams(update.Param); var topNum = TopNum; var limitSql = topNum.HasValue ? " LIMIT " + topNum.Value : ""; var tableName = FormatTableName(false); SqlString = $"UPDATE {tableName} {update.SqlCmd} WHERE {keyField} IN (SELECT {keyField} FROM {tableName} {whereSql} {limitSql} FOR UPDATE SKIP LOCKED) RETURNING {selectSql}"; return(this); }