Ejemplo n.º 1
0
        public SelectExpression(IEntityType entityType, string sql)
            : base("")
        {
            var fromSqlExpression = new FromSqlExpression(
                sql,
                entityType.GetTableName().ToLower().Substring(0, 1));

            _tables.Add(fromSqlExpression);

            _projectionMapping[new ProjectionMember()] = new EntityProjectionExpression(entityType, fromSqlExpression, false);
        }
Ejemplo n.º 2
0
        public SelectExpression(IEntityType entityType)
            : base("")
        {
            var tableExpression = new TableExpression(
                entityType.Relational().TableName,
                entityType.Relational().Schema,
                entityType.Relational().TableName.ToLower().Substring(0, 1));

            _tables.Add(tableExpression);

            _projectionMapping[new ProjectionMember()] = new EntityProjectionExpression(entityType, tableExpression, false);
        }
        internal SelectExpression(IEntityType entityType)
            : base("")
        {
            var tableExpression = new TableExpression(
                entityType.GetTableName(),
                entityType.GetSchema(),
                entityType.GetTableName().ToLower().Substring(0, 1));

            _tables.Add(tableExpression);

            _projectionMapping[new ProjectionMember()] = new EntityProjectionExpression(entityType, tableExpression, false);
        }
        protected override Expression VisitExtension(Expression expression)
        {
            if (expression is ShapedQueryExpression shapedQueryExpression)
            {
                if (shapedQueryExpression.QueryExpression is SelectExpression selectExpression &&
                    selectExpression.Limit != null &&
                    !selectExpression.Orderings.Any() &&
                    selectExpression.Tables.Count() == 1 &&
                    shapedQueryExpression.ShaperExpression is EntityShaperExpression entityShaperExpression &&
                    entityShaperExpression.EntityType.FindPrimaryKey() != null &&
                    selectExpression.Tables.Single() is TableExpression tableExpression
                    )
                {
                    var entityType          = entityShaperExpression.EntityType;
                    var table               = entityType.GetViewOrTableMappings().Single().Table;
                    var propertyExpressions = new Dictionary <IProperty, ColumnExpression>();

                    foreach (var property in entityType
                             .GetAllBaseTypes().Concat(entityType.GetDerivedTypesInclusive())
                             .SelectMany(Microsoft.EntityFrameworkCore.EntityTypeExtensions.GetDeclaredProperties))
                    {
                        var columnExpression = CreateColumnExpression(property, table.FindColumn(property), tableExpression, false);

                        propertyExpressions[property] = columnExpression;
                    }

                    var entityProjectionExpression = new EntityProjectionExpression(entityType, propertyExpressions, null);

                    foreach (var property in entityType.FindPrimaryKey().Properties)
                    {
                        var columnExpression = entityProjectionExpression.BindProperty(property);

                        selectExpression.AppendOrdering(new OrderingExpression(columnExpression, true));
                    }
                }

                return(shapedQueryExpression.Update(Visit(shapedQueryExpression.QueryExpression), shapedQueryExpression.ShaperExpression));
            }

            return(base.VisitExtension(expression));
        }
Ejemplo n.º 5
0
 private SqlExpression IsNotNull(IProperty property, EntityProjectionExpression entityProjection)
 => IsNotNull(entityProjection.BindProperty(property));
 private EntityReferenceExpression(EntityProjectionExpression parameter, Type type)
 {
     ParameterEntity = parameter;
     EntityType      = parameter.EntityType;
     Type            = type;
 }
 public EntityReferenceExpression(EntityProjectionExpression parameter)
 {
     ParameterEntity = parameter;
     EntityType      = parameter.EntityType;
     Type            = EntityType.ClrType;
 }
Ejemplo n.º 8
0
 public virtual ObjectArrayProjectionExpression Update(
     Expression accessExpression,
     EntityProjectionExpression innerProjection)
 => accessExpression != AccessExpression || innerProjection != InnerProjection
         ? new ObjectArrayProjectionExpression(Navigation, accessExpression, innerProjection)
         : this;
Ejemplo n.º 9
0
 /// <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 VisitEntityProjection(EntityProjectionExpression entityProjectionExpression);