ホームページ >バックエンド開発 >C++ >Entity Framework 1:1 リレーションシップでプリンシパル エンドを特定して構成するにはどうすればよいですか?

Entity Framework 1:1 リレーションシップでプリンシパル エンドを特定して構成するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-21 22:56:11293ブラウズ

How to Identify and Configure the Principal End in Entity Framework 1:1 Relationships?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。