列...参照列と同じ長さまたは尺度ではありません

c# entity-framework entity-framework-core

質問

Entity Framework 7には以下のエンティティがあります。

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

CountryUser設定は次のとおりです。

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

私は移行を作成することができますが、データベースを更新すると次のエラーが表示されます:

列 "Countries.Code"は参照元列 "Users.CountryCode"と同じ長さまたは尺度ではありません。前のキーは "FK_User_Country_CountryCode"です。外部キー関係に関与する列は、同じ長さと位取りで定義する必要があります。制約またはインデックスを作成できませんでした。

私はエラーを解決することができましたが、 CountryCodeプロパティ設定で.HasMaximumLength(2)取り除くことによってのみ終了しました。

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

私はそれを動作させることができますが、 Code列の長さを2に保つことはできますか?

受け入れられた回答

CountryCodeプロパティをUserエンティティから設定する必要があります。

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

}


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ