Los campos anulables se crean al personalizar la clase IdentityUser en asp.net Identity

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

Pregunta

Estoy tratando de personalizar la clase IdentityUser en la identidad asp.net.

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

    public bool IsBlocked { get; set; }
}

El problema es: cuando se utilizan las migraciones del código primero, el campo adicional se crea con posibilidad de nulos. Lo mismo si suelto la base de datos y la recrearé.

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

    public bool IsBlocked { get; set; }
}

¿Cómo puedo arreglar esto?

Tengo campos booleanos en otras clases en el mismo DbContext, y todos ellos se crean no nulos (como deberían).

Respuesta aceptada

La respuesta original, a continuación, asumió que tenía una clase base abstracta y, por lo tanto, estaba usando TPC, o posiblemente TPT si especificó el atributo [Table] en la clase concreta, en lugar de TPH .

Sin embargo, si está utilizando una clase base no abstracta y no especifica una [Table] en su ApplicationUser y, por lo tanto, su ApplicationUser e IdentityUser asignan a una sola tabla, entonces está utilizando el escenario TPH. En este escenario, cualquier campo de una subclase será anulable en su tabla única. La única forma de cambiar esto es cambiar a TPC o TPT.

Respuesta original

Ponga el atributo [Required] en su propiedad:

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

Su migración debería convertirla en una columna NON NULL .

Sin embargo, si ya tiene datos en su tabla, esto causará problemas, ya que no sabrá qué valor predeterminado crear. En este caso, edito la migración para convertirla primero en una columna NULL , luego ejecuto un comando Sql para establecer los valores que quiero, y luego AlterColumn convierte en una columna NON NULL AlterColumn

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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué