Метод userManager.FindByEmailAsync() возвращает объект с пустым именем пользователя и адресом электронной почты.C#

Место общения программистов C#
Ответить
Anonymous
 Метод userManager.FindByEmailAsync() возвращает объект с пустым именем пользователя и адресом электронной почты.

Сообщение Anonymous »

Мне пришлось расширить модель IdentityUser (и таблицу AspNetUser, конечно) дополнительным полем (

Код: Выделить всё

RegistrationDate
), поэтому я создал класс модели Extend IdentityUser. Это прекрасно работает.
Затем мне нужно было изменить некоторые пользовательские поля по умолчанию (

Код: Выделить всё

UserName
и Email) на необходимые. После этого метода изменения await userManager.FindByEmailAsync("my-mail@test.com"); start возвращает объект пользователя с пустыми полями username и email. Остальные файлы заполнены правильно, даже NormalizedUserName и NormalizedEmail. Прежде чем сделать имя пользователя и адрес электронной почты обязательным, все работало правильно.
Мой класс пользовательской модели выглядит так:

Код: Выделить всё

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; }
}
Мой класс пользовательской модели карты:

Код: Выделить всё

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()")
}
}

Код: Выделить всё

ApplicationDbContext
также был обновлен моим классом карты:

Код: Выделить всё

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
}
}
Сгенерированный код миграции выглядит хорошо:

Код: Выделить всё

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);
}
Изменения успешно применены к моей локальной базе данных — столбцы UserName и Email стали недействительными. Данные есть. Но вызов await userManager.FindByEmailAsync("my-mail@test.com"); возвращает объект пользователя с пустыми полями имени пользователя и адреса электронной почты.
Мой вопрос: что я такое? отсутствующий? Почему поля имени пользователя и электронной почты пусты для моего объекта пользователя?
Если это возможно, я бы хотел избежать реализации собственного userManager в качестве решения.

Подробнее здесь: https://stackoverflow.com/questions/793 ... me-and-ema
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»