Ich bin ein wenig verwirrt über UserManager.Create(...)
.Asp.Net Identität erstellt keine Datenbank bei Verwendung benutzerdefinierter Benutzer
Wenn ich die IdentityUser
Standard EntityFramework zum Erstellen und Hinzufügen eines neuen Benutzers verwenden, funktioniert alles einwandfrei. EntityFramework erstellt eine Datenbank, wenn keine mit meinem Connectionstring existiert Data Source=(LocalDb)\MSSQLLocalDB;Database=IdentityDemo;trusted_connection=yes;
und fügt einen Benutzer der Datenbank hinzu.
ExampleProgram:
static void Main(string[] args)
{
var username = "ygg";
var password = "Password123!";
var userStore = new UserStore<IdentityUser>();
var userManager = new UserManager<IdentityUser>(userStore);
var creationResult = userManager.Create(new IdentityUser(username), password);
}
Aber wenn ich versuche, mein eigenes CustomUser zu verwenden, EntityFramework tut nichts und ich eine Nullreferenceexception bei UserManager.Create(...)
bekommen.
Hier ist mein Erweiterte CustomUser Projekt:
static void Main(string[] args)
{
var userName = "Ygg";
var password = "Password123!";
var userStore = new CustomUserStore(new CustomUserDbContext());
var userManager = new UserManager<CustomUser, int>(userStore);
var creationResult = userManager.Create(
new CustomUser {UserName = userName}, password); //<--- Exception Here
}
CustomUser-Klasse:
public class CustomUser : IUser<int>
{
public int Id { get; set; }
public string UserName { get; set; }
public string PasswordHash { get; set; }
}
CustomUserDbContext:
public class CustomUserDbContext : IdentityDbContext
{
public CustomUserDbContext() : base("DefaultConnection")
{
}
public DbSet<CustomUser> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var user = modelBuilder.Entity<CustomUser>();
user.ToTable("Users");
user.HasKey(x => x.Id);
user.Property(x => x.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
user.Property(x => x.UserName).IsRequired().HasMaxLength(256)
.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("UserNameIndex") { IsUnique = true }));
base.OnModelCreating(modelBuilder);
}
}
Und lesen but not least, CustomUserStor:
public class CustomUserStore : IUserPasswordStore<CustomUser, int>
{
private readonly CustomUserDbContext _context;
public CustomUserStore(CustomUserDbContext context)
{
_context = context;
}
public void Dispose()
{
_context.Dispose();
}
public Task CreateAsync(CustomUser user)
{
_context.Users.Add(user);
return _context.SaveChangesAsync();
}
.
.
.
}
Ausnahme:
Objektverweis nicht
Stacktrace auf eine Instanz eines Objekts festgelegt:
bei Microsoft.AspNet.Identity.UserManager
2.<UpdatePassword>d__39.MoveNext() bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei Microsoft.AspNet.Identity.UserManager
2.d__d.MoveNext() bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Aufgabe Aufgabe) bei System.Runtime.CompilerServices.TaskAwaiter.Handl eNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) bei Microsoft.AspNet.Identity.AsyncHelper.RunSync [TResult] (Func1 func) bei Microsoft.AspNet.Identity.UserManagerExtensions.Create[TUser,TKey](UserManager
2 Manager, TUser Benutzer, String-Passwort) bei Identity.Program.Main (String [] args) in E: \ Syncplicity \ z003apfp \ Dokumente \ Visual Studio 2015 \ Projekte \ Identität \ Identität \ Programm.cs: Zeile 21. bei System.AppDomain._nExecuteAssembly (RuntimeAssembly Assembly, String [] Args) bei System.AppDomain.ExecuteAssembly (String AssemblyFile, Evidence AssemblySecurity , String [] args)
ich verwende EntityFramework 6.1.0 und 2.2.1 AspNet.Identity.Core
Habe ich etwas zu konfigurieren vermisst, so akzeptiert AspNet.Identity und EntityFrameworks meine eigenen Implementierungen hier?
Jede Hilfe oder Gedanken, wo das Problem liegt, wird geschätzt.
Ich habe bereits versucht, die Datenbank zuerst zu erstellen und dann versuchen, einen Benutzer mit userManager.Create(new CustomUser {UserName = userName}, password)
hinzufügen, aber dies führt auch zu der gleichen Nullreferenceexception
Veröffentlichen Sie die gesamte NullRef-Ausnahme. – mxmissile
Ich bin ein bisschen verwirrt. Möchten Sie, dass ASP.NET Identity die Tabelle "Users" für Sie erstellt und diese Tabelle anstelle der Tabelle "AspNetUsers" verwendet? – Win
Ja, genau das möchte ich erreichen. – Yggraz