0

データベースからブログ データを取得するために Entity Framework を使用しています。クラス「BlogPost」とクラス「Author」があります。1 人の Author には多くのブログ投稿がある場合がありますが、Author オブジェクト自体にはそれらのリストが含まれていません。Author オブジェクトに関する限り、すべてのブログ投稿から独立しています。

Author クラスのインスタンスは、BlogPost のプロパティとして含まれています。すべての著者には AuthorId があります。データベースから特定のブログを取得し、Author オブジェクトに関連データを入力したいと考えています。オブジェクトをマップする次のコードを使用して、BlogPost クラスに AuthorId プロパティを含めることで、これを行うことができました。

this.HasRequired(t => t.Author).WithMany().HasForeignKey(x => x.AuthorId);

ただし、モデルに直接 AuthorId プロパティを含める必要なく、同じことを実行できるようにしたいと考えています。その理由は、Author オブジェクトには対応する ID が既に含まれているため、同じ情報を 2 回繰り返しているからです。私はこれらの線に沿って何かをしたいと思います:

this.Property(t => t.Author.Id).HasColumnName("id_user");
this.HasRequired<TwitterUser>(t => t.Author).WithMany().HasForeignKey(t => t.Author.Id);

では、 AuthorID を Author オブジェクト自体と一緒に BlogPost オブジェクトに重複して格納することなく、 Author サブオブジェクトを取得する方法はありますか?

4

1 に答える 1

1

使用している構文は「外部キー関連付け」と呼ばれ、多くの問題を解決するため、EF 4 で導入されました。たとえば、FK アソシエーションを使用すると、カスケード削除を自動的に実行できます。

詳細については、こちらをご覧ください。

http://blogs.msdn.com/b/efdesign/archive/2009/03/16/foreign-keys-in-the-entity-framework.aspx

シンプルなナビゲーション プロパティを使用して、古い方法で作業を行うことができます。ただし、少し異なる構文が必要になります。1 つのことは、独立した関連付けでは、両端にナビゲーション プロパティが必要であり、これは一方通行のみが必要だとおっしゃいました。そのため、作成者エンティティに関連付けを追加するか、FK 関連付けを使用するかのいずれかで行き詰まっています。

私たち自身のLadislav Mrnkaによるこの記事も役立つかもしれません:

http://www.ladislavmrnka.com/2011/05/foreign-key-vs-independent-associations-in-ef-4/

また、EF チームによると、独立したアソシエーションは FK アソシエーションよりもはるかにパフォーマンスが低下する可能性があることに注意してください。ただし、これはビューの生成に限定されているようです。したがって、これは 1 回限りの起動コストです (アプリまたはアプリ ドメインを起動するたびに)。また、小さなモデルの場合、おそらく気付かないでしょう。

http://msdn.microsoft.com/en-us/data/hh949853.aspx

編集:

@Slauma が指摘したように、次のように .Map プロパティを使用して、独立した関連付けをマップできます。

this.HasRequired(t => t.Author).WithMany().Map(m => m.MapKey("AuthorId"));
于 2012-10-14T19:56:04.977 に答える