Die Methode userManager.FindByEmailAsync() gibt ein Objekt mit leerem Benutzernamen und leerer E-Mail-Adresse zurückC#

Ein Treffpunkt für C#-Programmierer
Guest
 Die Methode userManager.FindByEmailAsync() gibt ein Objekt mit leerem Benutzernamen und leerer E-Mail-Adresse zurück

Post by Guest »

Ich musste das IdentityUser-Modell (und natürlich die AspNetUser-Tabelle) um ein zusätzliches Feld erweitern (

Code: Select all

RegistrationDate
), also habe ich die Modellklasse „Extend IdentityUser“ erstellt. Es funktioniert gut.
Dann musste ich einige Benutzerstandardfelder ändern (

Code: Select all

UserName
und E-Mail) zu den erforderlichen. Nach dieser Änderung wird die Methode „wait userManager.FindByEmailAsync("my-mail@test.com"); gestartet und gibt ein Benutzerobjekt mit leeren Feldern Benutzername und E-Mail zurück. Der Rest ist ordnungsgemäß ausgefüllt, sogar NormalizedUserName und NormalizedEmail. Bevor Benutzername und E-Mail erforderlich gemacht wurden, funktionierte es ordnungsgemäß.
Meine benutzerdefinierte Modellklasse sieht folgendermaßen aus:

Code: Select all

public class ExtendedIdentityUser : IdentityUser
{
public override string UserName { get; set; } = string.Empty;
public override string Email { get; set; } = string.Empty;
public DateTime RegistrationDate { get; set; }
}
Meine benutzerdefinierte Kartenmodellklasse ist:

Code: Select all

public class ExtendedIdentityUserMap : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
// Properties
builder.Property(u => u.UserName).HasColumnName("UserName").IsRequired();
builder.Property(u => u.Email).HasColumnName("Email").IsRequired();
builder.Property(u => u.RegistrationDate).IsRequired();

// Default values
builder.Property(u => u.RegistrationDate).HasDefaultValueSql("GETDATE()")
}
}

Code: Select all

ApplicationDbContext
wurde auch mit meiner Kartenklasse aktualisiert:

Code: Select all

public class ApplicationDbContext(DbContextOptions options) : IdentityDbContext(options)
{
public DbSet ExtendedIdentityUsers { get; set; }
// another tables

protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);

builder.ApplyConfiguration(new ExtendedIdentityUserMap());
// another mappings
}
}
Der generierte Migrationscode sieht gut aus:

Code: Select all

protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn(
name: "UserName",
table: "AspNetUsers",
type: "nvarchar(256)",
maxLength: 256,
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "nvarchar(256)",
oldMaxLength: 256,
oldNullable: true);

migrationBuilder.AlterColumn(
name: "Email",
table: "AspNetUsers",
type: "nvarchar(256)",
maxLength: 256,
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "nvarchar(256)",
oldMaxLength: 256,
oldNullable: true);
}
Änderungen wurden erfolgreich auf meine lokale Datenbank angewendet – die Spalten „Benutzername“ und „E-Mail“ konnten nicht mehr auf Null gesetzt werden. Daten sind da. Aber der Aufruf von „await userManager.FindByEmailAsync("my-mail@test.com"); gibt ein Benutzerobjekt mit leeren Benutzernamen- und E-Mail-Feldern zurück.
Meine Frage ist: Was bin ich? fehlen? Warum sind die Felder „Benutzername“ und „E-Mail“ für mein Benutzerobjekt leer?
Wenn es möglich ist, möchte ich es vermeiden, einen eigenen UserManager als Lösung zu implementieren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post