Ist es möglich, die neue Asp.net-Identität mit Database First und EDMX zu verwenden? Oder nur mit Code zuerst?
Folgendes habe ich getan:
1) Ich habe ein neues MVC5-Projekt erstellt und die neue Identität die neuen Benutzer- und Rollentabellen in meiner Datenbank erstellen lassen.
2) Ich habe dann meine Database First EDMX-Datei geöffnet und in die neue Identity Users-Tabelle gezogen, da ich andere Tabellen habe, die sich darauf beziehen.
3) Beim Speichern des EDMX erstellt der Database First POCO-Generator automatisch eine Benutzerklasse. UserManager und RoleManager erwarten jedoch eine Benutzerklasse, die vom neuen Identitätsnamensraum (Microsoft.AspNet.Identity.IUser) erbt, sodass die Verwendung der POCO-Benutzerklasse nicht funktioniert.
Ich denke, eine mögliche Lösung besteht darin, meine POCO-Generierungsklassen so zu bearbeiten, dass meine Benutzerklasse von IUser erbt.
Oder ist ASP.NET Identity nur mit Code First Design kompatibel?
+++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++
Update: Nach dem folgenden Vorschlag von Anders Abel habe ich Folgendes getan. Es funktioniert, aber ich frage mich, ob es eine elegantere Lösung gibt.
1) Ich habe meine Entitätsbenutzerklasse erweitert, indem ich eine Teilklasse im selben Namespace wie meine automatisch generierten Entitäten erstellt habe.
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
2) Ich habe meinen DataContext so geändert, dass er von IdentityDBContext anstelle von DBContext erbt. Beachten Sie, dass Sie jedes Mal, wenn Sie Ihren EDMX aktualisieren und die DBContext- und Entity-Klassen neu generieren, dies auf diesen Wert zurücksetzen müssen.
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
3) Innerhalb Ihrer automatisch generierten Benutzerentitätsklasse müssen Sie das Schlüsselwort override zu den folgenden 4 Feldern hinzufügen oder diese Felder auskommentieren, da sie von IdentityUser geerbt werden (Schritt 1). Beachten Sie, dass Sie jedes Mal, wenn Sie Ihren EDMX aktualisieren und die DBContext- und Entity-Klassen neu generieren, dies auf diesen Wert zurücksetzen müssen.
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }