[C#.NET][Entity Framework] 在 Code First 實作具有排序功能的 Guid

[C#.NET][Entity Framework] 在 Code First 實作具有排序功能的 Guid

POCO Proxy 定義,用 Id 產生具有順序的流水號,用來驗証 Guid 是否能照順序排序:


{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Key]
    public Guid Guid { get; set; }

    public string Name { get; set; }
}

DbContex 實作如下:


{
    public DbSet<Employee> Employees { get; set; }

    public UserDbContext(string contectString)
        : base(contectString)
    {
    }

    public UserDbContext()
        : base("localdb")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        Database.SetInitializer(new MyDropCreateDatabaseAlways());
    }
}

 

 

 

建立假資料:


{
    protected override void Seed(UserDbContext context)
    {
        base.Seed(context);
        context.Employees.Add(new Employee() { Guid = Guid.NewGuid(), Name = "jordan" });
        context.Employees.Add(new Employee() { Guid = Guid.NewGuid(), Name = "kobe" });
        context.Employees.Add(new Employee() { Guid = Guid.NewGuid(), Name = "pippen" });
        context.Employees.Add(new Employee() { Guid = Guid.NewGuid(), Name = "bibby" });
        context.Employees.Add(new Employee() { Guid = Guid.NewGuid(), Name = "omer" });
        context.Employees.Add(new Employee() { Guid = Guid.NewGuid(), Name = "rose" });
        context.Employees.Add(new Employee() { Guid = Guid.NewGuid(), Name = "wade" });
        context.Employees.Add(new Employee() { Guid = Guid.NewGuid(), Name = "lin" });
    }
}

 

使用 LINQPad 來觀察,操作步驟請參考

http://www.dotblogs.com.tw/yc421206/archive/2014/07/15/145969.aspx

 

來段小代碼,看看是否有排序功能,我對 Guid 欄位排序,Id 欄位沒有按照順序排列,表示該 Guid 沒有順序性

image

 

接著用 dbForge 觀察,Code First 幫我們產生的 T-SQL 語法

image

 

 


 

在 Guid 欄位加上[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

image

 

 

 

 

 

 

 

 

再跑一次 Guid 排序,這時就可以看到 Id 欄位很有規舉的排好,Guid 欄位的資料看起來都長的好像,這怎麼辦到的?

image

image

 

原來,Code First 幫我們產生的 T-SQL 調用了 T-SQL 裡的newsequentialid 方法

image

 


文章出自:http://www.dotblogs.com.tw/yc421206/archive/2014/07/15/145966.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo