[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 沒有順序性
接著用 dbForge 觀察,Code First 幫我們產生的 T-SQL 語法
在 Guid 欄位加上[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
再跑一次 Guid 排序,這時就可以看到 Id 欄位很有規舉的排好,Guid 欄位的資料看起來都長的好像,這怎麼辦到的?
原來,Code First 幫我們產生的 T-SQL 調用了 T-SQL 裡的newsequentialid 方法
文章出自:http://www.dotblogs.com.tw/yc421206/archive/2014/07/15/145966.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET