internal override TPrimitivePropertyConfiguration Property <TPrimitivePropertyConfiguration>( LambdaExpression lambdaExpression) { return(this.Configuration.Property <TPrimitivePropertyConfiguration>(lambdaExpression.GetComplexPropertyAccess(), (Func <TPrimitivePropertyConfiguration>)(() => new TPrimitivePropertyConfiguration() { OverridableConfigurationParts = OverridableConfigurationParts.None }))); }
protected override void ApplyNodeSpecificSemantics(QueryModel queryModel, ClauseGenerationContext clauseGenerationContext) { var queryAnnotationResultOperator = (QueryAnnotationResultOperator)clauseGenerationContext.GetContextInfo(Source); ((IncludeQueryAnnotation)queryAnnotationResultOperator.Annotation) .AppendToNavigationPath(_navigationPropertyPathLambda.GetComplexPropertyAccess()); clauseGenerationContext.AddContextInfo(this, queryAnnotationResultOperator); }
internal TPrimitivePropertyConfiguration Property <TPrimitivePropertyConfiguration>( LambdaExpression lambdaExpression) where TPrimitivePropertyConfiguration : Properties.Primitive.PrimitivePropertyConfiguration, new() { return(_entityMappingConfiguration.Property( lambdaExpression.GetComplexPropertyAccess(), () => new TPrimitivePropertyConfiguration { OverridableConfigurationParts = OverridableConfigurationParts.None })); }
protected override QueryModel ApplyNodeSpecificSemantics(QueryModel queryModel, ClauseGenerationContext clauseGenerationContext) { var includeResultOperator = (IncludeResultOperator)clauseGenerationContext.GetContextInfo(Source); includeResultOperator.AppendToNavigationPath(_navigationPropertyPathLambda.GetComplexPropertyAccess()); clauseGenerationContext.AddContextInfo(this, includeResultOperator); return(queryModel); }
private IEnumerable <MemberInfo> ProcessIncludeLambda(LambdaExpression lambdaExpression) { IReadOnlyList <PropertyInfo> properties; try { properties = lambdaExpression .GetComplexPropertyAccess(nameof(EntityFrameworkQueryableExtensions.Include)); } catch (ArgumentException argumentException) { throw new InvalidOperationException(argumentException.Message, argumentException); } var entityType = model.GetEntityTypes() .SingleOrDefault(t => !t.IsOwned() && t.ClrType == lambdaExpression.Parameters[0].Type); if (entityType == null) { throw new NotSupportedException( CoreStrings.IncludeNotSpecifiedDirectlyOnEntityType( $"Include(\"{string.Join('.', properties.Select(p => p.Name))}\")", properties.First().Name)); } foreach (var property in properties) { var navigation = entityType.FindNavigation(property); if (navigation == null) { navigation = entityType .FindDerivedNavigations(property.Name) .SingleOrDefault(n => n.GetReadableMemberInfo() == property); } if (navigation == null) { throw new InvalidOperationException( CoreStrings.IncludeBadNavigation(property, entityType.DisplayName())); } yield return(property); entityType = navigation.GetTargetType(); } }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> protected override ResultOperatorBase CreateResultOperator(ClauseGenerationContext clauseGenerationContext) { var prm = Expression.Parameter(typeof(object)); var pathFromQuerySource = Resolve(prm, prm, clauseGenerationContext); if (!(_navigationPropertyPathLambda.Body is MemberExpression)) { throw new InvalidOperationException(CoreStrings.InvalidPropertyExpression(_navigationPropertyPathLambda)); } var includeResultOperator = new IncludeResultOperator( _navigationPropertyPathLambda.GetComplexPropertyAccess("?not sure what goes here?").Select(p => p.Name), pathFromQuerySource); clauseGenerationContext.AddContextInfo(this, includeResultOperator); return(includeResultOperator); }
internal TPrimitivePropertyConfiguration Property <TPrimitivePropertyConfiguration>( LambdaExpression lambdaExpression) where TPrimitivePropertyConfiguration : System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration, new() { return(this._entityMappingConfiguration.Property <TPrimitivePropertyConfiguration>(lambdaExpression.GetComplexPropertyAccess(), (Func <TPrimitivePropertyConfiguration>)(() => new TPrimitivePropertyConfiguration() { OverridableConfigurationParts = OverridableConfigurationParts.None }))); }