Неверные поля создаются при настройке класса IdentityUser в asp.net Identity

asp.net-identity ef-code-first entity-framework entity-framework-6

Вопрос

Я пытаюсь настроить класс IdentityUser в asp.net-идентификаторе.

public class ApplicationUser : IdentityUser
{
    public ApplicationUser()
    {
        IsBlocked = false;
    }

    public bool IsBlocked { get; set; }
}

Проблема заключается в следующем: при первом использовании кода сначала добавляется дополнительное поле. То же самое, если я отбрасываю базу данных и воссоздаю ее.

public class ApplicationUser : IdentityUser
{
    public ApplicationUser()
    {
        IsBlocked = false;
    }

    public bool IsBlocked { get; set; }
}

Как я могу это исправить?

У меня есть логические поля в других классах в одном и том же DbContext, и все они созданы не null (как и должны).

Принятый ответ

Первоначальный ответ, ниже, предполагал, что у вас есть абстрактный базовый класс, и поэтому использовали TPC или, возможно, TPT, если вы указали атрибут [Table] для конкретного класса, а не TPH .

Однако, если вы используете неабстрактный базовый класс и не указываете [Table] на своем ApplicationUser , и поэтому ваша модель ApplicationUser и IdentityUser сопоставляются с одной таблицей, то вы используете сценарий TPH. В этом случае любые поля из подкласса будут нулевыми в вашей единственной таблице. Единственный способ изменить это - переключиться на TPC или TPT.

Оригинальный ответ

Поместите атрибут [Required] в ваше свойство:

[Required]
public bool IsBlocked { get; set; }

Затем ваша миграция должна иметь столбец NON NULL .

Однако, если у вас уже есть данные в вашей таблице, это вызовет проблемы, поскольку он не будет знать, какое значение по умолчанию нужно создать. В этом случае я редактирую миграцию, чтобы сначала сделать столбец NULL , а затем запустить команду Sql для установки значений, которые я хочу, а затем AlterColumn сделать столбец NON NULL

[Required]
public bool IsBlocked { get; set; }



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему