12

我想使用System.Guid類型作爲我在asp.net web api應用程序中的所有表的id。但我也使用Asp.net標識,它使用字符串 -type id(也用於存儲guid)。所以我想知道爲什麼它使用字符串 id而不是System.Guid默認情況下?什麼是更好的選擇通過所有的應用程序使用 - Guid id或字符串-guid id?在使用字符串的情況下 - 在代碼或數據庫中生成新的id的最合適和最可靠的方法是什麼?爲什麼asp.net標識用戶標識是字符串?

+0

「爲什麼」解釋[這裏](http://stackoverflow.com/q/19238621/304683) - 在這篇文章中的答案將真正幫助。心連心。 – EdSF

+0

感謝@EdSF,但是我仍然對組織應用程序的最佳方式是什麼 - string-guids或guids(uniqueidentifier)的id? – Ostap

+0

這取決於你的要求。請參閱[Rick Anderson(MSFT)的答案](http://stackoverflow.com/a/24152085/304683)以獲取指導。 – EdSF

回答

0

取決於您使用的是哪種版本的ASP.Net身份驗證,數據庫上的ASP.NET Identity v2應將其存儲爲AspNetUsers表中的唯一標識符(Guid)。在更多的前面版本中,它將在webpages_Membership表中將用戶標識存儲爲int。

我相信它將它表現爲一個字符串,因此它可以是任何您喜歡的數據類型,然後可以根據需要在代碼中進行轉換。

+0

您好,我正在使用最新版本的ASP.NET成員資格系統 - ASP.NET身份。我仍然不確定,對數據庫中的所有表使用字符串的最佳做法是什麼?或者將所有內容都轉換爲GUID? – Ostap

+0

@ user3460585 int vs Guids是古老的論點。看到這些答案:http://dba.stackexchange.com/a/266/6868 http://blog.codinghorror.com/primary-keys-ids-versus-guids/ http://programmers.stackexchange.com/a/189031/86760 – trailmax

+0

對不起,我沒有意識到你在問你的數據庫。通常我們所做的就是將用戶名記錄存儲在我們的數據庫中的用戶記錄中,然後我們可以引用ASP.Net記錄,同時也將您從基礎成員層中分離出來。 – Tim

5

使用ASP.NET Core,您可以使用一種非常簡單的方式來指定Identity的模型所需的數據類型。

第一步,超越身份等級從<字符串><數據鍵入要>

public class ApplicationUser : IdentityUser<Guid> 
{ 
} 

public class ApplicationRole : IdentityRole<Guid> 
{ 
} 

聲明你的數據庫環境,使用類和數據輸入你想要的:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid> 
    { 
     public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
      : base(options) 
     { 
     } 

     protected override void OnModelCreating(ModelBuilder builder) 
     { 
      base.OnModelCreating(builder); 
      // Customize the ASP.NET Identity model and override the defaults if needed. 
      // For example, you can rename the ASP.NET Identity table names and more. 
      // Add your customizations after calling base.OnModelCreating(builder); 
     } 
    } 

而在您的啓動類中,使用您的模型聲明身份服務並聲明您想要的數據類型ary鍵:

services.AddIdentity<ApplicationUser, ApplicationRole>() 
      .AddEntityFrameworkStores<ApplicationDbContext, Guid>() 
      .AddDefaultTokenProviders(); 
+1

有關信息,現在官方文檔中有一個主題:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-primary-key-configuration – AdrienTorris

相關問題