12

Ich möchte System.Guid Typ als ID für alle meine Tabellen in asp.net Web-API-Anwendung verwenden. Aber ich benutze auch Asp.net Identity, die eine string-Typ-ID verwendet (um auch Guids zu speichern). Also frage ich mich, warum es String ID anstelle von System.Guid standardmäßig verwendet? Und was ist die bessere Wahl, um durch die ganze Anwendung zu verwenden - Guid ID oder Zeichenfolge -guid id? Im Falle der Verwendung von String - Was ist der beste und zuverlässigste Weg, um neue ID-In-Code oder in der Datenbank zu generieren?Warum Asp.net Identity-Benutzer-ID Zeichenfolge?

+0

Das "Warum" erklärt [hier] (http://stackoverflow.com/q/19238621/304683) - beide Antworten in diesem Beitrag wird wirklich helfen. Hth. – EdSF

+0

Danke @EdSF, aber ich habe immer noch eine offene Frage, was ist der beste Weg, um Anwendung zu organisieren - String-Guids oder Guids (uniqueidentifier) ​​für ID? – Ostap

+0

Es hängt von _your_ Anforderungen ab. Siehe die [Antwort von Rick Anderson (MSFT)] (http://Stackoverflow.com/a/24152085/304683) zur Orientierung. – EdSF

Antwort

0

Je nachdem, welche Version der ASP.Net-Authentifizierung Sie verwenden, sollte ASP.NET Identity v2 diese in der Tabelle AspNetUsers als eindeutige Kennung (Guid) in der Datenbank speichern. In früheren Versionen wird die Benutzer-ID als Int in der Tabelle webpages_Membership gespeichert.

Ich glaube, dass es als eine Zeichenfolge, so dass es jeder Datentyp, den Sie mögen, unter der Haube und dies kann dann in Ihrem Code wie erforderlich umgewandelt werden.

+0

Hallo Tim, ich verwende die neueste Version des Mitgliedschaftssystems für ASP.NET - ASP.NET Identity. Ich bin immer noch nicht sicher, was ist die beste Methode, um String für alle Tabellen in meiner Datenbank zu verwenden oder alles in GUID zu konvertieren? – Ostap

+0

@ user3460585 Int vs Guids sind uraltes Argument. Siehe diese Antworten: 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

Entschuldigung, ich wusste nicht, dass Sie nach Ihrer Datenbank gefragt haben. Im Allgemeinen speichern wir den Benutzernamen gegen einen Benutzerdatensatz in unserer Datenbank, den wir dann auf den ASP.Net-Datensatz verweisen können. Außerdem werden Sie von der zugrunde liegenden Mitgliedschaftsschicht getrennt. – Tim

5

Mit ASP.NET Core haben Sie eine sehr einfache Möglichkeit, den Datentyp für Identity-Modelle anzugeben.

Erster Schritt, Überschreibung Identität Klassen von < string>-< gewünschten Datentyp>:

public class ApplicationUser : IdentityUser<Guid> 
{ 
} 

public class ApplicationRole : IdentityRole<Guid> 
{ 
} 

Ihren Datenbank-Kontext erklären, Ihre Klassen und der gewünschten Datentyp:

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

Und in Ihrer Startup-Klasse, deklarieren Sie den Identity Service mit Ihren Modellen und deklarieren Sie den Datentyp für die Prim ary Schlüssel:

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

Für Informationen gibt es ein Thema in der offiziellen Dokumentation jetzt: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-primary-key-configuration – AdrienTorris