Entity Framework 1:1 関係: 主要エンティティの定義
Entity Framework の 1 対 1 の関係では、一方のエンティティが「プリンシパル」として指定され、もう一方のエンティティが「依存」として指定されます。 主体エンティティは、独立して存在し、独自の主キーを所有するエンティティです。逆に、依存エンティティは、主エンティティの主キーを参照する外部キーに依存します。
例と主要なエンティティの識別
このコード スニペットを調べてみましょう:
<code class="language-csharp">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; } }</code>
ここで、Foo
は独自の主キー (FooId
) を持っているため、主要なエンティティとして機能します。一方、Boo
は依存エンティティであり、外部キーを介して FooId
を参照します。
「プリンシパル終了を決定できません」エラーへの対処
Entity Framework でこの関係を構成すると、「関連付けの主端を決定できません...」というエラーが発生する可能性があります。これは、Entity Framework が主要なエンティティを識別するための明示的なガイダンスを必要とするために発生します。
明示的なプリンシパル終了構成
これを解決するには、データ アノテーションまたは Fluent API を使用して主目的を明確に定義します。
方法 1: データの注釈
[Key]
属性と [ForeignKey]
属性を使用して、依存エンティティ内の外部キー プロパティを指定します。
<code class="language-csharp">public class Boo { [Key, ForeignKey("Foo")] public string BooId { get; set; } public Foo Foo { get; set; } }</code>
方法 2: Fluent API
WithRequired()
メソッドを使用して依存エンティティを指定し、HasOptional()
を主エンティティに指定します。
<code class="language-csharp">modelBuilder.Entity<Foo>() .HasOptional(f => f.Boo) .WithRequired(s => s.Foo);</code>
結論
Entity Framework の 1:1 関係におけるプリンシパル エンティティを正しく識別して構成することが不可欠です。 データ アノテーションまたは Fluent API を使用して主端を明示的に定義することで、「主端を決定できません」エラーを回避し、正確なデータベース マッピングを確保します。
以上がEntity Framework 1:1 リレーションシップでプリンシパル エンドを特定して構成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。