2016-07-04 3 views
1

これは単なる単純なものですが、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にアップグレードしました。

答えて

2

例外として、ナビゲーションプロパティは1つの関係にしか含めることができません。 RC2では、EFは最初のものを静かに2番目のものに置き換えますが、RTMではこの事実を知らせるために投げます。 別のプロパティを作成する必要があります。たとえば、他の関係のためにClientsAtHomeを作成する必要があります。

関連する問題