Skip to content

Invalid column name: orderby uses a column alias that does not exist #12180

Closed
@mcorthout

Description

@mcorthout

Under rather peculiar circumstances, orderby tries to use a column alias in the ORDER BY clause that is not present in the SELECT clause.

Exception:

fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
      Failed executing DbCommand (29ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT [item].[Id], [item].[Name] AS [AnotherName]
      FROM [Items] AS [item]
      ORDER BY [item].[Id], [SomeName]
System.Data.SqlClient.SqlException (0x80131904): Invalid column name 'SomeName'.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)

Steps to reproduce

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Console;
using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;

namespace EFCoreBugTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new Context())
            {
                context.Database.EnsureDeleted();
                context.Database.EnsureCreated();

                var problem = from item in context.Items
                              orderby item.Id, item.Name
                              select new SomeOtherObject
                              {
                                  Id = item.Id,
                                  SomeName = item.Name,
                                  AnotherName = item.Name
                              };

                var boom = problem.ToList();
            }

            Console.ReadLine();

        }
    }

    public class Context : DbContext
    {
        public static readonly LoggerFactory logger = new LoggerFactory(new[] { new ConsoleLoggerProvider((_, __) => true, true) });

        public DbSet<Item> Items { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseLoggerFactory(logger);
            optionsBuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=master;Database=demo;Integrated Security=True");
        }        
    }

    public class Item
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class SomeOtherObject
    {
        public int Id { get; set; }
        public string SomeName { get; set; }
        public string AnotherName { get; set; }
    }
}

Expected result

SELECT [item].[Id], [item].[Name] AS [AnotherName]
FROM [Items] AS [item]
ORDER BY [item].[Id], [item].[Name] 

Actual result

SELECT [item].[Id], [item].[Name] AS [AnotherName]
FROM [Items] AS [item]
ORDER BY [item].[Id], [SomeName]

Further technical details

EF Core version: 2.1.0
Database Provider: Microsoft.EntityFrameworkCore.SqlServer
Operating system: Windows 7
IDE: Visual Studio 2017 15.7.2

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions