2

私はEF5で使用している次のクラスを持っています

 public class Question
 {
    public Question()
    {
        this.Answers = new List<Answer>();
    } 
    public int QuestionId { get; set; }
    ...
    ...
    public string Title { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
}

public class Answer
{
    public int AnswerId { get; set; }
    public string Text { get; set; }
    public int QuestionId { get; set; }
    public virtual Question Question { get; set; }
}

プロパティが必要な理由を教えてください。

public virtual Question Question { get; set; }

自動遅延読み込みを行うつもりはないが、時々インクルードでそのオブジェクトを持ち込むつもりなら、次のような仮想プロパティが必要ですか?

        var questions = _questionsRepository.GetAll()
            .Include(a => a.Answers);

私が尋ねている理由は、Web API で使用すると、json で循環参照エラーが発生するためです。

4

3 に答える 3

1

マッピング構成を表示しないと、おそらく私の側に少し仮定がありますが、エンティティ間の関連付けを定義するために独立した関連付けを使用していると思われます。

これは、オブジェクト間の関係が参照としてモデル化される Entity Framework の機能であるため、実際にはオブジェクトに外部キー プロパティが存在する必要はありません。つまり、両方のエンティティにナビゲーション プロパティを定義する必要があるため、Entity Framework は関連付けを管理できます。あなたの場合、エンティティにQuestionプロパティが必要です。Answers

エンティティ フレームワークの以降のバージョン (4 以降と思われます) では、別のタイプの関連付け「外部キー関連付け」を使用できます。これにより、外部キー プロパティを使用して関連付けを形成できます。これにより、Questionナビゲーション プロパティを削除できるようになります (役立つ場合とそうでない場合があります)。

ここで受け入れられた答えとして、より良い説明があります: Code First: Independent associations vs. Foreign key associations?

とはいえ、関連付けが正しく機能している場合、問題はエンティティ/Web API の使用方法にある可能性があります (これについてはコメントするほどよくわかりません)。

幸運=D

于 2013-06-26T14:46:41.220 に答える
0

ナビゲーション プロパティを仮想としてマークしない場合、たとえばユーザー オブジェクトを要求すると、db は関連するオブジェクトも返します。ただし、virtual を使用すると、オブジェクトを明示的に要求するとオブジェクトが表示されます。これは、ユーザーに関連するオブジェクトやオブジェクトに関連するユーザーを常に必要としない可能性があるため、パフォーマンス上の理由から適切です。それらが必要な場合は、virtual キーワードを使用しない場合と同様に、.Include() を使用してそれらを取得できます。詳細については、EF の熱心な読み込みと遅延読み込みの概念についてお読みください。

于 2013-06-26T14:00:14.950 に答える
0

それは関係に依存します。質問は回答に関連付けられており、回答は質問に関連付けることができます。

あなたのモデルが何であるかはわかりませんが、私のポイントを提示します。

答えは、「白」と「色 白」の 2 つの答えを持つことができます。

#FFFFFF の人間の定義は何ですか? 雪の色は?

両方の質問が両方の回答に一致します。だから私たちは関係を持っています。

于 2013-06-26T14:06:23.320 に答える