La columna ... no tiene la misma longitud o escala que la columna de referencia

c# entity-framework entity-framework-core

Pregunta

Con Entity Framework 7 tengo las siguientes entidades:

public class Country {
  public String Code { get; set; }
  public String Name { get; set; }
  public virtual ICollection<User> Users { get; set; }    
}

public class User : IdentityUser<Int32> {   
  public String CountryCode { get; set; }
  public virtual Country Country { get; set; }
}

Y las configuraciones de Country y User son:

public class Country {
  public String Code { get; set; }
  public String Name { get; set; }
  public virtual ICollection<User> Users { get; set; }    
}

public class User : IdentityUser<Int32> {   
  public String CountryCode { get; set; }
  public virtual Country Country { get; set; }
}

Puedo crear la migración pero cuando actualizo la base de datos, aparece el siguiente error:

La columna "Paises.Código" no tiene la misma longitud o escala que la columna de referencia "Users.CountryCode" es la clave "FK_User_Country_CountryCode". Las columnas que participan en una relación de clave externa deben definirse con la misma longitud y escala. No se pudo crear restricción o índice.

Pude resolver el error pero solo eliminando .HasMaximumLength(2) en la configuración de la propiedad del Code Country , así que terminé con:

public class Country {
  public String Code { get; set; }
  public String Name { get; set; }
  public virtual ICollection<User> Users { get; set; }    
}

public class User : IdentityUser<Int32> {   
  public String CountryCode { get; set; }
  public virtual Country Country { get; set; }
}

¿Cómo puedo hacer que funcione pero manteniendo la longitud de la columna del Code igual a 2?

Respuesta aceptada

Debe configurar la propiedad CountryCode de la entidad de usuario así:

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

    builder.Entity<Country>().ToTable("Countries");
    builder.Entity<Country>().HasKey(x => x.Code);
    builder.Entity<Country>().Property(x => x.Code).IsRequired().HasMaximumLength(2).ValueGeneratedNever();
    builder.Entity<Country>().Property(x => x.Name).IsRequired().HasMaxLength(80);        

    builder.Entity<User>().ToTable("User");
    builder.Entity<User>().HasKey(x => x.CountryCode);
    builder.Entity<User>().Property(x => x.CountryCode).IsRequired().HasMaximumLength(2).ValueGeneratedNever();
    builder.Entity<User>()
        .HasOne(x => x.Country)
        .WithMany(x => x.Users)
        .HasForeignKey(x => x.CountryCode);

}



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é