OrderBy using entity instance with composite key returns wrong order

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Fixed
    • Priority: Unknown
    • 9.0.1, 8.3.1
    • Affects Version/s: None
    • None
    • 🔵 Done
    • Dotnet Drivers
    • None
    • None
    • None
    • None
    • None
    • None

      The repro below runs this query:

      context.Set<Order>().OrderBy(o => o).ToList();
      

      Order has a composite key consisting of two ints: Id1 and Id2. The order returned is:

      1 1
      1 2
      1 3
      2 3
      2 2
      2 1
      3 4
      3 1

      The expected order is:

      1 1
      1 2
      1 3
      2 1
      2 2
      2 3
      3 1
      3 4

      Repro:

      using var context = new SomeDbContext();
      context.Database.EnsureDeleted();
      context.Database.EnsureCreated();
      
      context.AddRange(
          new Order { Id1 = 1, Id2 = 1 },
          new Order { Id1 = 1, Id2 = 2 },
          new Order { Id1 = 1, Id2 = 3 },
          new Order { Id1 = 2, Id2 = 3 },
          new Order { Id1 = 2, Id2 = 2 },
          new Order { Id1 = 2, Id2 = 1 },
          new Order { Id1 = 3, Id2 = 4 },
          new Order { Id1 = 3, Id2 = 1 });
      
      context.SaveChanges();
      
      var results = context.Set<Order>().OrderBy(o => o).ToList();
      foreach (var result in results)
      {
          Console.WriteLine($"{result.Id1} {result.Id2}");
      }
      
      public class SomeDbContext : DbContext
      {
          protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
              => optionsBuilder
                  //.UseSqlite("DataSource = db.dat")
                  .UseMongoDB("mongodb://localhost:27017", "SomeDb3")
                  .LogTo(Console.WriteLine, LogLevel.Information);
      
          protected override void OnModelCreating(ModelBuilder modelBuilder)
          {
              modelBuilder.Entity<Order>().HasKey(e => new { e.Id1, e.Id2 });
          }
      }
      
      public class Order
      {
          public int Id1 { get; set; }
          public int Id2 { get; set; }
      }
      

            Assignee:
            Damien Guard
            Reporter:
            Arthur Vickers
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: