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);
Beispiel #4
0
 /// <summary>
 /// Visitor pattern method for DbNewInstanceExpression.
 /// </summary>
 /// <param name="expression">The DbNewInstanceExpression that is being visited.</param>
 public abstract void Visit(DbNewInstanceExpression expression);