La colonna ... non ha la stessa lunghezza o scala della colonna di riferimento

c# entity-framework entity-framework-core

Domanda

Con Entity Framework 7 ho le seguenti entità:

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; }
}

E le configurazioni per Country e User sono:

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<Country>().ToTable("Users");

  builder.Entity<Country>()
    .HasOne(x => x.Country)
    .WithMany(x => x.Users)
    .HasForeignKey(x => x.CountryCode);
}

Sono in grado di creare la migrazione ma quando aggiorno il database ottengo il seguente errore:

La colonna "Countries.Code" non ha la stessa lunghezza o scala della colonna di riferimento "Users.CountryCode" è la chiave principale "FK_User_Country_CountryCode". Le colonne che partecipano a una relazione di chiave esterna devono essere definite con la stessa lunghezza e scala. Impossibile creare vincoli o indici.

Sono stato in grado di risolvere l'errore ma solo rimuovendo .HasMaximumLength(2) nella configurazione delle proprietà del Code Country , quindi ho finito con:

  builder.Entity<Country>().Property(x => x.Code).IsRequired().ValueGeneratedNever();

Come posso farlo funzionare ma mantenendo la lunghezza della colonna Code uguale a 2?

Risposta accettata

È necessario configurare la proprietà CountryCode dall'entità User in questo modo:

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);

}


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché