/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> public virtual Expression BindProperty([NotNull] IProperty property, bool clientEval) { if (!EntityType.IsAssignableFrom(property.DeclaringEntityType) && !property.DeclaringEntityType.IsAssignableFrom(EntityType)) { throw new InvalidOperationException( CoreStrings.EntityProjectionExpressionCalledWithIncorrectInterface( "GetProperty", nameof(IProperty), EntityType.DisplayName(), $"Property:{property.Name}")); } if (!_propertyExpressionsCache.TryGetValue(property, out var expression)) { expression = new KeyAccessExpression(property, AccessExpression); _propertyExpressionsCache[property] = expression; } if (!clientEval && expression.Name.Length == 0) { // Non-persisted property can't be translated return(null); } return((Expression)expression); }
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> public virtual Expression BindProperty([NotNull] IProperty property, bool clientEval) { if (!EntityType.IsAssignableFrom(property.DeclaringEntityType) && !property.DeclaringEntityType.IsAssignableFrom(EntityType)) { throw new InvalidOperationException( CosmosStrings.UnableToBindMemberToEntityProjection("Property", property.Name, EntityType.DisplayName())); } if (!_propertyExpressionsMap.TryGetValue(property, out var expression)) { expression = new KeyAccessExpression(property, AccessExpression); _propertyExpressionsMap[property] = expression; } if (!clientEval // TODO: Remove once __jObject is translated to the access root in a better fashion and // would not otherwise be found to be non-translatable. See issues #17670 and #14121. && property.Name != StoreKeyConvention.JObjectPropertyName && expression.Name.Length == 0) { // Non-persisted property can't be translated return(null); } return((Expression)expression); }
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected override Expression VisitKeyAccess(KeyAccessExpression keyAccessExpression) { Check.NotNull(keyAccessExpression, nameof(keyAccessExpression)); _sqlBuilder.Append(keyAccessExpression); return(keyAccessExpression); }
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> public virtual SqlExpression BindProperty(IProperty property) { if (!EntityType.IsAssignableFrom(property.DeclaringEntityType) && !property.DeclaringEntityType.IsAssignableFrom(EntityType)) { throw new InvalidOperationException( $"Called EntityProjectionExpression.GetProperty() with incorrect IProperty. EntityType:{EntityType.DisplayName()}, Property:{property.Name}"); } if (!_propertyExpressionsCache.TryGetValue(property, out var expression)) { expression = new KeyAccessExpression(property, AccessExpression); _propertyExpressionsCache[property] = expression; } return(expression); }
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> public virtual Expression BindProperty([NotNull] IProperty property, bool clientEval) { if (!EntityType.IsAssignableFrom(property.DeclaringEntityType) && !property.DeclaringEntityType.IsAssignableFrom(EntityType)) { throw new InvalidOperationException( CosmosStrings.UnableToBindMemberToEntityProjection("Property", property.Name, EntityType.DisplayName())); } if (!_propertyExpressionsMap.TryGetValue(property, out var expression)) { expression = new KeyAccessExpression(property, AccessExpression); _propertyExpressionsMap[property] = expression; } if (!clientEval && expression.Name.Length == 0) { // Non-persisted property can't be translated return(null); } return((Expression)expression); }
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> public virtual Expression BindProperty(IProperty property, bool clientEval) { if (!EntityType.IsAssignableFrom(property.DeclaringEntityType) && !property.DeclaringEntityType.IsAssignableFrom(EntityType)) { throw new InvalidOperationException( $"Called EntityProjectionExpression.GetProperty() with incorrect IProperty. EntityType:{EntityType.DisplayName()}, Property:{property.Name}"); } if (!_propertyExpressionsCache.TryGetValue(property, out var expression)) { expression = new KeyAccessExpression(property, AccessExpression); _propertyExpressionsCache[property] = expression; } if (!clientEval && expression.Name.Length == 0) { // Non-persisted property can't be translated return(null); } return((Expression)expression); }
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected abstract Expression VisitKeyAccess(KeyAccessExpression keyAccessExpression);
protected abstract Expression VisitKeyAccess([NotNull] KeyAccessExpression keyAccessExpression);
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected override Expression VisitKeyAccess(KeyAccessExpression keyAccessExpression) { _sqlBuilder.Append(keyAccessExpression); return(keyAccessExpression); }