2017-04-08 1 views
0

Ich muss selbst neuen Guid-Wert generieren. Zur Zeit habe ich Helfer Tabelle mit dieser Struktur:Kann ich UserId für Entity Framework AspNet Identity manuell generieren?

(id, aspnet_id) 

Und wenn ich einen Benutzer oder eine Liste von Benutzern erhalten müssen, muss ich diese beiden Tabellen verbinden.

Kann ich Entity Framework Identity Manager anweisen, keine neuen Guids zu generieren, sondern den generated-by-me-Wert zu verwenden?

+0

Sie wollen nicht Primärschlüssel von Datenbank generiert verwenden, nicht wahr? Als Option können Sie die Schlüsseleigenschaft als DatabaseGeneratedOption.None annotieren und ihr für alle hinzugefügten Entitäten im Änderungs-Tracker eine generierte GUID zuweisen. –

+0

Asp.Net Identity-Klasse hat Guid.NewGuid() in seinem Konstruktor, also denke ich, es ist nicht Datenbank, die diese Schlüssel erstellt. – EwanCoder

Antwort

0

Sie haben Recht, die GUID wird nicht in der Datenbank generiert. Wenn Sie sich die Tabelle ansehen, werden Sie feststellen, dass das Feld keinen Standardwert hat.

Außerdem müssen mit Entity Framework Datenbankwerte im Konstruktor der Klasse festgelegt werden. Ist dies nicht der Fall, wird der Standardwert der Datenbank mit Ausnahme von Schlüsseln (Autonummern) und Feldern überschrieben, die in der Datenbank vorhanden sind, dem Modell jedoch nicht bekannt sind.

Wenn Sie also einen neuen IdentityUser erstellen, wird die ID mit einer Guid festgelegt. Aber man kann den Wert überschreiben:

var appUser = new IdentityUser 
{ 
    UserName = model.Email, 
    Email = model.Email, 
    Id = "the desired guid" 
}; 
var identityResult = await userManager.CreateAsync(appUser, model.Password); 

Unabhängig davon, wie Sie die Benutzer hinzufügen, die usermanager oder direkt, wird diese Arbeit. Die Antwort ist also, ja du kannst.

Als Nebenbei bemerkt, können Sie auch die IdentityUser erweitern Felder hinzuzufügen:

public class ApplicationUser : IdentityUser 
{ 
    [Required] 
    public int aspnet_id{ get; set; } 

    public DateTime? LastLogin { get; set; } 
} 
Verwandte Themen