これは単なる単純なものですが、EFコアのリリースバージョンにアップグレードしたばかりで、DBに対してコードを実行できなくなりました。EFコアRC2からV1へのアップグレード時に同じテーブル例外を参照する外部キー
私は2つのテーブル、クライアントテーブルと言語テーブルを持っています。クライアントには、言語テーブルと、自宅の言語用の2つの参照があります。 私はV1にRC2のアップグレードのマニュアルを見てきました次の2行
modelBuilder.Entity<Client>().HasOne(m => m.LanguageAtHome).WithMany(m => m.Clients).HasForeignKey(p => p.LanguageAtHomeId).HasConstraintName("ForeignKey_Client_LanguageAtHome");
modelBuilder.Entity<Client>().HasOne(m => m.Language).WithMany(m => m.Clients).HasForeignKey(p => p.LanguageId).HasConstraintName("ForeignKey_Client_Language");
を持っている私のOnModelCreating中のSO言語は
public ICollection<Client> Clients { get; set; }
とクライアントが
public Language Language { get; set; }
private int? _languageId;
public int? LanguageId
{
get
{
if (_languageId != 0)
return _languageId;
if (Language != null)
return Language.LanguageId;
return null;
}
set { _languageId = value; }
}
public Language LanguageAtHome { get; set; }
private int? _languageAtHomeId;
public int? LanguageAtHomeId
{
get
{
if (_languageAtHomeId != 0)
return _languageAtHomeId;
if (LanguageAtHome != null)
return LanguageAtHome.LanguageId;
return null;
}
set { _languageAtHomeId = value; }
}
を持っており、これには何も言わない。 https://docs.efproject.net/en/latest/miscellaneous/rc2-rtm-upgrade.html
例外は次のとおりです。
System.InvalidOperationException: Cannot create a relationship between 'Language.Clients' and 'Client.Language', because there already is a relationship between 'Language.Clients' and 'Client.LanguageAtHome'. Navigation properties can only participate in a single relationship.
私は
modelBuilder.Entity<Language>().HasMany(l => l.Clients).WithOne(c => c.LanguageAtHome).HasForeignKey(k => k.LanguageAtHomeId).HasConstraintName("ForeignKey_Client_LanguageAtHome");
modelBuilder.Entity<Language>().HasMany(l => l.Clients).WithOne(c => c.Language).HasForeignKey(k => k.LanguageId).HasConstraintName("ForeignKey_Client_Language");
にそれを逆転しようとしたしかし、私は正確に同じエラーを取得します。
git hub iのEFソースを調べると、このチェンジセットhttps://github.com/aspnet/EntityFramework/commit/5765564bc4dc55f9acb1716a1f5b40a8f8b0b399の内部関係ビルダー行2145にエラーが戻されました。
この変更は、RC2とV1の間で発生しています。
私の質問は何か間違っているのですか、これは導入されたバグですか?
UPDATE - アンドリー
への解決のおかげで、私はそう
public ICollection<Client> LanguageAtHomeClients { get; set; }
public ICollection<Client> LanguageClients { get; set; }
のようにクライアントの2つのコレクションを持っている私の言語のクラスを変更し、
modelBuilder.Entity<Client>().HasOne(m => m.LanguageAtHome).WithMany(m => m.LanguageAtHomeClients).HasForeignKey(p => p.LanguageAtHomeId).HasConstraintName("ForeignKey_Client_LanguageAtHome");
modelBuilder.Entity<Client>().HasOne(m => m.Language).WithMany(m => m.LanguageClients).HasForeignKey(p => p.LanguageId).HasConstraintName("ForeignKey_Client_Language");
にOnModelCreating関係を修正しました
私はEF Core V1にアップグレードしました。