Example #1
0
 internal override TPrimitivePropertyConfiguration Property <TPrimitivePropertyConfiguration>(
     LambdaExpression lambdaExpression)
 {
     return(this.Configuration.Property <TPrimitivePropertyConfiguration>(lambdaExpression.GetComplexPropertyAccess(), (Func <TPrimitivePropertyConfiguration>)(() => new TPrimitivePropertyConfiguration()
     {
         OverridableConfigurationParts = OverridableConfigurationParts.None
     })));
 }
Example #2
0
        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);
        }
Example #7
0
 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
     })));
 }