public string GenerateUpdate( ICollection <DbUpdateCommandTree> commandTrees, string rowsAffectedParameter) { if (!commandTrees.Any <DbUpdateCommandTree>()) { return((string)null); } StringBuilder sql = new StringBuilder(); List <SqlParameter> parameters; sql.AppendLine(DmlSqlGenerator.GenerateUpdateSql(commandTrees.First <DbUpdateCommandTree>(), this._sqlGenerator, out parameters, false, true)); foreach (DbUpdateCommandTree tree in commandTrees.Skip <DbUpdateCommandTree>(1)) { sql.Append(DmlSqlGenerator.GenerateUpdateSql(tree, this._sqlGenerator, out parameters, false, true)); sql.AppendLine("AND @@ROWCOUNT > 0"); sql.AppendLine(); } List <DbUpdateCommandTree> list = commandTrees.Where <DbUpdateCommandTree>((Func <DbUpdateCommandTree, bool>)(ct => ct.Returning != null)).ToList <DbUpdateCommandTree>(); if (list.Any <DbUpdateCommandTree>()) { DmlFunctionSqlGenerator.ReturningSelectSqlGenerator selectSqlGenerator = new DmlFunctionSqlGenerator.ReturningSelectSqlGenerator(); foreach (DbUpdateCommandTree updateCommandTree in list) { updateCommandTree.Target.Expression.Accept((DbExpressionVisitor)selectSqlGenerator); updateCommandTree.Returning.Accept((DbExpressionVisitor)selectSqlGenerator); updateCommandTree.Predicate.Accept((DbExpressionVisitor)selectSqlGenerator); } sql.AppendLine(selectSqlGenerator.Sql); sql.AppendLine(); } DmlFunctionSqlGenerator.AppendSetRowsAffected(sql, rowsAffectedParameter); return(sql.ToString().TrimEnd()); }
public string GenerateInsert(ICollection <DbInsertCommandTree> commandTrees) { StringBuilder stringBuilder = new StringBuilder(); DbInsertCommandTree insertCommandTree1 = commandTrees.First <DbInsertCommandTree>(); List <SqlParameter> parameters; stringBuilder.Append(DmlSqlGenerator.GenerateInsertSql(insertCommandTree1, this._sqlGenerator, out parameters, false, true, false)); stringBuilder.AppendLine(); EntityType elementType = (EntityType)((DbScanExpression)insertCommandTree1.Target.Expression).Target.ElementType; stringBuilder.Append(this.IntroduceRequiredLocalVariables(elementType, insertCommandTree1)); foreach (DbInsertCommandTree tree in commandTrees.Skip <DbInsertCommandTree>(1)) { stringBuilder.Append(DmlSqlGenerator.GenerateInsertSql(tree, this._sqlGenerator, out parameters, false, true, false)); stringBuilder.AppendLine(); } List <DbInsertCommandTree> list = commandTrees.Where <DbInsertCommandTree>((Func <DbInsertCommandTree, bool>)(ct => ct.Returning != null)).ToList <DbInsertCommandTree>(); if (list.Any <DbInsertCommandTree>()) { DmlFunctionSqlGenerator.ReturningSelectSqlGenerator selectSqlGenerator = new DmlFunctionSqlGenerator.ReturningSelectSqlGenerator(); foreach (DbInsertCommandTree insertCommandTree2 in list) { insertCommandTree2.Target.Expression.Accept((DbExpressionVisitor)selectSqlGenerator); insertCommandTree2.Returning.Accept((DbExpressionVisitor)selectSqlGenerator); } foreach (EdmProperty keyProperty1 in elementType.KeyProperties) { EdmProperty keyProperty = keyProperty1; DbExpression right = insertCommandTree1.SetClauses.Cast <DbSetClause>().Where <DbSetClause>((Func <DbSetClause, bool>)(sc => ((DbPropertyExpression)sc.Property).Property == keyProperty)).Select <DbSetClause, DbExpression>((Func <DbSetClause, DbExpression>)(sc => sc.Value)).SingleOrDefault <DbExpression>() ?? (DbExpression)keyProperty.TypeUsage.Parameter(keyProperty.Name); insertCommandTree1.Target.Variable.Property(keyProperty).Equal(right).Accept((DbExpressionVisitor)selectSqlGenerator); } stringBuilder.Append(selectSqlGenerator.Sql); } return(stringBuilder.ToString().TrimEnd()); }