1. ホーム
  2. c#

[解決済み】Entity frameworkの1:1リレーションシップにおけるアソシエーションの主端とは?

2022-04-03 23:18:48

質問

public class Foo
{
    public string FooId{get;set;}
    public Boo Boo{get;set;}
}


public class Boo
{
    public string BooId{get;set;}
    public Foo Foo{get;set;}
}

Entity Frameworkでやろうとした時にエラーが出たんです。

型間の関連付けの主端を決定できません。 'ConsoleApplication5.Boo' と 'ConsoleApplication5.Foo' です。 この関連付けの主端は、次のいずれかを使用して明示的に構成する必要があります。 リレーション・フルエント API またはデータ・アノテーションを使用しています。

StackOverflowでこのエラーの解決策を記した質問を見ましたが、"principal end"という言葉の意味を理解したいのですが、どうしたらいいですか?

解決方法を教えてください。

一対一の関係では、一方の端が主であり、もう一方の端が従でなければならない。主端とは、最初に挿入され、従属端がなくても存在できる端のことです。従属端は主端に対する外部キーを持っているので、主端の後に挿入されなければならないものです。

エンティティフレームワークの場合、依存関係のFKは、そのPKでもなければならないので、あなたの場合は、これを使うべきです。

public class Boo
{
    [Key, ForeignKey("Foo")]
    public string BooId{get;set;}
    public Foo Foo{get;set;}
}

または流暢なマッピング

modelBuilder.Entity<Foo>()
            .HasOptional(f => f.Boo)
            .WithRequired(s => s.Foo);