public override DbExpression Visit(DbNewInstanceExpression expression) { EntityUtil.CheckArgumentNull(expression, "expression"); DbExpression result = expression; TypeUsage newType = this.VisitTypeUsage(expression.ResultType); IList <DbExpression> newArguments = this.VisitExpressionList(expression.Arguments); bool unchanged = (object.ReferenceEquals(expression.ResultType, newType) && object.ReferenceEquals(expression.Arguments, newArguments)); if (expression.HasRelatedEntityReferences) { IList <DbRelatedEntityRef> newRefs = this.VisitList(expression.RelatedEntityReferences, this.VisitRelatedEntityRef); if (!unchanged || !object.ReferenceEquals(expression.RelatedEntityReferences, newRefs)) { result = CqtBuilder.CreateNewEntityWithRelationshipsExpression((EntityType)newType.EdmType, newArguments, newRefs); } } else { if (!unchanged) { result = CqtBuilder.New(newType, System.Linq.Enumerable.ToArray(newArguments)); } } NotifyIfChanged(expression, result); return(result); }
/// <summary> /// Visitor pattern method for <see cref="DbNewInstanceExpression"/>. /// </summary> /// <param name="expression">The DbNewInstanceExpression that is being visited.</param> /// <exception cref="ArgumentNullException"><paramref name="expression"/> is null</exception> public override void Visit(DbNewInstanceExpression expression) { // #433613: PreSharp warning 56506: Parameter 'expression' to this public method must be validated: A null-dereference can occur here. EntityUtil.CheckArgumentNull(expression, "expression"); VisitExpressionList(expression.Arguments); if (expression.HasRelatedEntityReferences) { Debug.Assert(expression.RelatedEntityReferences != null, "HasRelatedEntityReferences returned true for null RelatedEntityReferences list?"); this.VisitRelatedEntityReferenceList(expression.RelatedEntityReferences); } }
/// <summary> /// Typed visitor pattern method for DbNewInstanceExpression. /// </summary> /// <param name="expression">The DbNewInstanceExpression that is being visited.</param> /// <returns>An instance of TResultType.</returns> public abstract TResultType Visit(DbNewInstanceExpression expression);
/// <summary> /// Visitor pattern method for DbNewInstanceExpression. /// </summary> /// <param name="expression">The DbNewInstanceExpression that is being visited.</param> public abstract void Visit(DbNewInstanceExpression expression);