我想使用System.Guid類型作爲我在asp.net web api應用程序中的所有表的id。但我也使用Asp.net標識,它使用字符串 -type id(也用於存儲guid)。所以我想知道爲什麼它使用字符串 id而不是System.Guid默認情況下?什麼是更好的選擇通過所有的應用程序使用 - Guid id或字符串-guid id?在使用字符串的情況下 - 在代碼或數據庫中生成新的id的最合適和最可靠的方法是什麼?爲什麼asp.net標識用戶標識是字符串?
回答
取決於您使用的是哪種版本的ASP.Net身份驗證,數據庫上的ASP.NET Identity v2應將其存儲爲AspNetUsers
表中的唯一標識符(Guid)。在更多的前面版本中,它將在webpages_Membership
表中將用戶標識存儲爲int。
我相信它將它表現爲一個字符串,因此它可以是任何您喜歡的數據類型,然後可以根據需要在代碼中進行轉換。
您好,我正在使用最新版本的ASP.NET成員資格系統 - ASP.NET身份。我仍然不確定,對數據庫中的所有表使用字符串的最佳做法是什麼?或者將所有內容都轉換爲GUID? – Ostap
@ 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
對不起,我沒有意識到你在問你的數據庫。通常我們所做的就是將用戶名記錄存儲在我們的數據庫中的用戶記錄中,然後我們可以引用ASP.Net記錄,同時也將您從基礎成員層中分離出來。 – Tim
使用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();
有關信息,現在官方文檔中有一個主題:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-primary-key-configuration – AdrienTorris
- 1. org.hibernate.NonUniqueObjectException - hibernate認爲是什麼標識符
- 2. iPhone - 什麼是重用標識符(UITableViewCell)?
- 3. 標識符不能爲空字符串
- 4. 預期標識符?什麼?
- 5. asp.net公共字符串不是一個有效的標識符
- 6. 需要標識符是什麼意思?
- 7. XACML標識符是什麼意思?
- 8. 什麼是Dreamweaver的包標識符?
- 9. 爲什麼GETDATE()無效的標識符
- 10. 爲什麼DllImport需要標識符?
- 11. 標識中的字符標識
- 12. 爲什麼字符串標識符通常是一個設定的長度?
- 13. Twilio調用者標識和Asp.Net標識
- 14. 什麼是'多部分標識符',爲什麼不能綁定?
- 15. PayPal用戶標識符
- 16. 依靠Facebook用戶標識作爲永久性用戶標識
- 17. ASP.NET爲什麼接受外部創建的會話標識符?
- 18. 語法錯誤:標識符'字符串'
- 19. 標識符後分割C字符串
- 20. 製作C標識符和字符串?
- 21. 標識符「字符串」未定義?
- 22. 拆分標識符字符串python
- 23. 字符串未聲明的標識符
- 24. ASP.NET會話標識符
- 25. 爲什麼在UITableViewCell標識符中使用static關鍵字?
- 26. 爲什麼我不能在我的程序申報的字符串:「字符串是未聲明的標識符」
- 27. 爲什麼字符串[]被識別爲只是一個字符串
- 28. 爲什麼CREATE TABLE中的一個標識符是雙引號的,但不是其他標識符?
- 29. MembershipProvider用戶標識
- 30. 標識2.0字符串或Int主鍵?
「爲什麼」解釋[這裏](http://stackoverflow.com/q/19238621/304683) - 在這篇文章中的答案將真正幫助。心連心。 – EdSF
感謝@EdSF,但是我仍然對組織應用程序的最佳方式是什麼 - string-guids或guids(uniqueidentifier)的id? – Ostap
這取決於你的要求。請參閱[Rick Anderson(MSFT)的答案](http://stackoverflow.com/a/24152085/304683)以獲取指導。 – EdSF