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

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

Susan Sarandon
リリース: 2025-01-21 22:36:11
オリジナル
901 人が閲覧しました

How to Define the Principal End in Entity Framework's 1:1 Relationships?

Entity Framework 1:1 関係におけるマスター側の定義

メイン端末とは何ですか?

1:1 の関係では、一方のエンティティをマスターとして指定し、もう一方のエンティティをスレーブとして指定する必要があります。マスターは関係を所有するエンティティ、または関係を維持する責任を負うエンティティですが、スレーブはマスター エンティティの存在に依存します。

コードエラー分析

Entity Framework で発生しているエラーは、メイン側で Foo と Boo の関係が明確に定義されていないことが原因で発生します。 Entity Framework では、どのエンティティの主キーを下位エンティティの外部キーとして使用するかを決定するために、この仕様が必要です。

1 対 1 の関係のマスターとスレーブ

コードでは、Foo と Boo の関係は 1 対 1 の関係です。マスターを識別する方法は次のとおりです:

  • メインエンド: 独立して存在できるエンド、つまり関係の作成または維持を担当するエンティティ。
  • スレーブエンド: マスターエンドに依存するエンド、つまりマスターエンドが存在する場合にのみ存在できるエンティティ。

あなたの例では、Boo エンティティから独立して存在できるため、Foo がマスターになる必要があります。一方、Boo はデータベースに Foo 主キーを挿入する必要があるため、Foo に依存します。

メインターミナルを構成します

Entity Framework で 1:1 関係のマスター側を構成するには、2 つの方法があります。

流暢なマッピング:

<code class="language-csharp">modelBuilder.Entity<Foo>()
    .HasOptional(f => f.Boo)
    .WithRequired(s => s.Foo);</code>
ログイン後にコピー

データ注釈:

<code class="language-csharp">public class Foo
{
    [Key]
    public string FooId { get; set; }
    public Boo Boo { get; set; }
}

public class Boo
{
    [Key, ForeignKey("Foo")]
    public string BooId { get; set; }
    public Foo Foo { get; set; }
}</code>
ログイン後にコピー

マスターを定義することで、Foo が関係を所有し、対応する Foo レコードが存在する場合にのみ Boo が存在できることを指定します。

以上がEntity Framework の 1:1 リレーションシップでプリンシパル エンドを定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート