// effects: try to find setter expression for the given member // requires: command tree must be an insert or update tree (since other DML trees hnabve private static bool TryGetSetterExpression(DbModificationCommandTree tree, EdmMember member, ModificationOperator op, out DbSetClause setter) { Debug.Assert(op == ModificationOperator.Insert || op == ModificationOperator.Update, "only inserts and updates have setters"); IEnumerable<DbModificationClause> clauses; if (ModificationOperator.Insert == op) { clauses = ((DbInsertCommandTree)tree).SetClauses; } else { clauses = ((DbUpdateCommandTree)tree).SetClauses; } foreach (DbSetClause setClause in clauses) { // check if this is the correct setter if (((DbPropertyExpression)setClause.Property).Property.EdmEquals(member)) { setter = setClause; return true; } } // no match found setter = null; return false; }
protected virtual void VisitSetClause(DbSetClause setClause) { EntityUtil.CheckArgumentNull(setClause, "setClause"); this.VisitExpression(setClause.Property); this.VisitExpression(setClause.Value); }
/// <summary> /// Gets DB command definition encapsulating store logic for this command. /// </summary> private DbCommand CreateCommand(UpdateTranslator translator, Dictionary<int, object> identifierValues) { DbModificationCommandTree commandTree = m_modificationCommandTree; // check if any server gen identifiers need to be set if (null != m_inputIdentifiers) { Dictionary<DbSetClause, DbSetClause> modifiedClauses = new Dictionary<DbSetClause, DbSetClause>(); for (int idx = 0; idx < m_inputIdentifiers.Count; idx++) { KeyValuePair<int, DbSetClause> inputIdentifier = m_inputIdentifiers[idx]; object value; if (identifierValues.TryGetValue(inputIdentifier.Key, out value)) { // reset the value of the identifier DbSetClause newClause = new DbSetClause(inputIdentifier.Value.Property, DbExpressionBuilder.Constant(value)); modifiedClauses[inputIdentifier.Value] = newClause; m_inputIdentifiers[idx] = new KeyValuePair<int, DbSetClause>(inputIdentifier.Key, newClause); } } commandTree = RebuildCommandTree(commandTree, modifiedClauses); } return translator.CreateCommand(commandTree); }
protected virtual void VisitSetClause(DbSetClause setClause) { //Contract.Requires(setClause != null); VisitExpression(setClause.Property); VisitExpression(setClause.Value); }
protected virtual void VisitSetClause(DbSetClause setClause) { EntityUtil.CheckArgumentNull(setClause, "setClause"); this.VisitExpression(setClause.Property); this.VisitExpression(setClause.Value); }
/// <summary> /// Gets DB command definition encapsulating store logic for this command. /// </summary> protected virtual DbCommand CreateCommand(Dictionary<int, object> identifierValues) { var commandTree = _modificationCommandTree; // check if any server gen identifiers need to be set if (null != _inputIdentifiers) { var modifiedClauses = new Dictionary<DbSetClause, DbSetClause>(); for (var idx = 0; idx < _inputIdentifiers.Count; idx++) { var inputIdentifier = _inputIdentifiers[idx]; object value; if (identifierValues.TryGetValue(inputIdentifier.Key, out value)) { // reset the value of the identifier var newClause = new DbSetClause(inputIdentifier.Value.Property, DbExpressionBuilder.Constant(value)); modifiedClauses[inputIdentifier.Value] = newClause; _inputIdentifiers[idx] = new KeyValuePair<int, DbSetClause>(inputIdentifier.Key, newClause); } } commandTree = RebuildCommandTree(commandTree, modifiedClauses); } return Translator.CreateCommand(commandTree); }