12

Asp.net web api uygulamasında tüm tablolarım için bir kimlik olarak System.Guid türünü kullanmak istiyorum. Ancak, aynı zamanda dizgisi -type kimliğini kullanarak (kılavuzları da saklamak için) Asp.net Identity kullanıyorum. Bu yüzden neden varsayılan olarak dize dize System.Guid yerine kullanıyor? Ve tüm uygulama ile kullanmak için daha iyi bir seçim nedir - Guid kimliği veya dize -tizlik kimliği? Dize kullanılması durumunda - yeni kimlik kodu veya veritabanı oluşturmanın en doğru ve güvenilir yolu nedir?Neden asp.net Kimlik kullanıcı kimliği dizgidir?

+0

[burada] (http://stackoverflow.com/q/19238621/304683) - bu görevde her iki cevap gerçekten yardımcı olacaktır. Hth. – EdSF

+0

Teşekkür @EdSF, ancak uygulama için en iyi yolun ne olduğu konusunda hala açık bir sorum var - dize kılavuzları veya Rehberler (benzersiz belirleyici) id için? – Ostap

+0

_your_ gereksinimlerine bağlıdır. Rehberlik için [Rick Anderson'un (MSFT) cevabı] (http://stackoverflow.com/a/24152085/304683) adresine bakınız. – EdSF

cevap

0

Kullandığınız ASP.Net kimlik doğrulamasının hangi sürümüne bağlı olarak, ASP.NET Identity v2 veritabanında, AspNetUsers tablosunda benzersiz bir tanımlayıcı (Guid) olarak depolanmalıdır. Daha önceki sürümlerde, kullanıcı kimliğini webpages_Membership tablosunda int olarak saklayacaktır.

Sanırım onu ​​bir dize olarak göstermesini sağladığından kaputun altında istediğiniz herhangi bir veri türü olabilir ve bu da sizin kodunuzda gerektiği şekilde yayınlanabilir.

+0

Merhaba Tim, ASP.NET - ASP.NET Kimlik için üyelik sisteminin en son sürümünü kullanıyorum. Hala emin değilim, veritabanımdaki tüm tablolar için dize kullanmak veya her şeyi GUID'e dönüştürmek için en iyi uygulama nedir? – Ostap

+0

@ user3460585 int Guids, eski bir argümandır. Şu yanıtları inceleyin: 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

Üzgünüz, veritabanınızı sorduğunuzu bilmiyordum. Genelde yaptığımız şey, kullanıcı adını, veritabanımızdaki bir kullanıcı kaydına karşı saklamaktır, bu şekilde ASP.Net kaydını referans alabiliriz, aynı zamanda sizi temel üyelik katmanından ayırır. – Tim

5

ASP.NET Core ile, Identity'nin modelleri için istediğiniz veri türünü belirtmenin çok basit bir yolu vardır.

public class ApplicationUser : IdentityUser<Guid> 
{ 
} 

public class ApplicationRole : IdentityRole<Guid> 
{ 
} 

sizin sınıfları kullanarak, veritabanı içeriğinde beyan ve veri istediğiniz yazın::

İlk adım, geçersiz kılma kimlik sınıfları < dizesinden>-< verilerini> istediğiniz tip

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); 
     } 
    } 

Ve başlangıç ​​sınıfınızda, modellerinizi kullanarak kimlik hizmetini bildirin ve prim için istediğiniz veri türünü bildirin. li tuşları: açıklanmıştır "neden"

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

Daha fazla bilgi için, şu an resmi belgede şu konu başlıkları var: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-primary-key-configuration – AdrienTorris