2017-10-31 6 views
1

관계형 데이터베이스와 함께 주문하지 않고 EF Core의 Guid로 주문하려고합니다. 내가 잘못하고있는 일이 있습니까, 아니면 이것이 EF 핵심 문제 일 수 있습니까?엔티티 프레임 워크 core orderby guid가 제대로 주문하지 못했습니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using Microsoft.Data.Sqlite; 
using Microsoft.EntityFrameworkCore; 
using NUnit.Framework; 

namespace TestName 
{ 
    public class BoxDbContext : DbContext 
    { 
     public BoxDbContext(
      DbContextOptions<BoxDbContext> options) : base(options) 
     { 
     } 

     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<Box>().HasKey(x => x.Id); 
      modelBuilder.Entity<Box>().Property(t => t.Id).ValueGeneratedOnAdd(); 
      base.OnModelCreating(modelBuilder); 
     } 
    } 

    public class Box 
    { 
     public Guid Id { get; set; } 
     public Guid SubId { get; set; } 
    } 

    [TestFixture] 
    public class TestClass 
    { 
     private SqliteConnection SqliteConnection { get; set; } 

     private DbContextOptions<BoxDbContext> Options => new DbContextOptionsBuilder<BoxDbContext>() 
      .UseSqlite(SqliteConnection) 
      .EnableSensitiveDataLogging() 
      .Options; 

     private DbContext GetDbContext() 
     { 
      BoxDbContext dbContext = new BoxDbContext(Options); 
      dbContext.Database.EnsureCreated(); 
      return dbContext; 
     } 

     [SetUp] 
     public void DbSetup() 
     { 
      SqliteConnectionStringBuilder sqliteConnectionStringBuilder = new SqliteConnectionStringBuilder 
      { 
       Mode = SqliteOpenMode.Memory, 
       Cache = SqliteCacheMode.Private 
      }; 
      SqliteConnection = new SqliteConnection(sqliteConnectionStringBuilder.ToString()); 
      SqliteConnection.Open(); 
     } 

     [TearDown] 
     public void DbTearDown() 
     { 
      SqliteConnection.Close(); 
     } 

     [Test] 
     public async Task OrderByGuid() 
     { 
      List<Guid> subIds = new List<Guid> 
      { 
       Guid.Parse("901CAB07-315F-4594-A5C6-C37725643DB8"), 
       Guid.Parse("FA1760E7-27F4-4F8B-9205-44ACF2358044"), 
       Guid.Parse("0C434803-0004-4894-8E29-597AA8BCF8E2"), 
       Guid.Parse("C7E76CF2-35D1-4CF8-8A67-83F41842F052"), 
       Guid.Parse("1D6F9038-B5B3-4559-9480-3A2651E52623"), 
      }; 

      using (DbContext dbContext = GetDbContext()) 
      { 
       foreach (Guid subId in subIds) 
       { 
        dbContext.Set<Box>().Add(new Box {SubId = subId}); 
       } 
       await dbContext.SaveChangesAsync(); 
      } 

      IList<Box> boxs; 
      using (DbContext approvalsDbContext = GetDbContext()) 
      { 
       boxs = await approvalsDbContext 
        .Set<Box>() 
        .OrderByDescending(x => x.SubId) 
        .ToListAsync(); 
      } 

      Assert.That(boxs.Count, Is.EqualTo(subIds.Count)); 
      Assert.That(boxs.ToArray()[0].SubId, Is.EqualTo(subIds[1])); 
      Assert.That(boxs.ToArray()[1].SubId, Is.EqualTo(subIds[3])); 
      Assert.That(boxs.ToArray()[2].SubId, Is.EqualTo(subIds[0])); 
      Assert.That(boxs.ToArray()[3].SubId, Is.EqualTo(subIds[4])); 
      Assert.That(boxs.ToArray()[4].SubId, Is.EqualTo(subIds[2])); 
     } 
    } 
} 

덕분에, 크리스

+0

첫 번째 문자로 GUID를 참조하면 출력이 '0', '1', '9', 'C', 'F'가 아님을 알 수 있습니까? –

+0

나는 정확한 반대를 의미합니다, 그냥 내림차순이라고 보았습니다 –

+1

나는 처음으로 C를 받고 있습니다. – chris31389

답변