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); }