6

オプションの 1 対多の関係を機能させるのに問題があります。

私のモデルは次のとおりです。

public class Person
{
    public int Identifier { get; set; }
    ...
    public virtual Department Department { get; set; }
}

public class Department
{
    public int Identifier { get; set; }
    ...
    public virtual IList<Person> Members { get; set; }
}

Departmentに 0 または 1を割り当てたいPerson。割り当てられると、 はの-List にPerson表示されます。MembersDepartment

Person次のように Fluent API を使用して構成しています。

HasKey(p => p.Identifier);
HasOptional(p => p.Department).WithMany(d => d.Members);

Departmentの代わりに を構成して、別の方法も試しましたPerson

HasMany(d => d.Members).WithOptional(p => p.Department);

ただし、どちらの方法でも例外が発生します。

タイプ 'Person' と 'Department' の間の関連付けのプリンシパル エンドを特定できません。この関連付けのプリンシパル エンドは、リレーションシップ fluent API またはデータ アノテーションのいずれかを使用して明示的に構成する必要があります。

そのように両方を同時に構成すると、次のようになります。

タイプ 'Person' で宣言されたナビゲーション プロパティ 'Department' は、競合する多重度で構成されています。

別のエンティティ タイプの設定と同じ設定を使用してもPerson機能しますが、そのエンティティ タイプはそれ自体を参照します。

この関係を適切に構成するにはどうすればよいですか?

4

3 に答える 3

10

これを試すことができます:

this.HasOptional(s => s.Department)
    .WithMany(s => s.Members)
    .HasForeignKey(s => s.MemberOfDepartment);
于 2015-03-27T17:01:28.767 に答える