これは説明するのが難しいものです。私は、テーブルのテストとテーブルの学生、およびスコアカードを含む DB を持っています。各テストには学生の FK があり、スコアカードにも同じことが当てはまります。
学生は複数回テストを受けることができるため、同じ学生を指すテストの記録が多数存在する可能性があります。
現在、スコアカードはメモリ内でのみ使用しています。これらのスコアカード オブジェクトのリストがあります: liScoreCard. すべてのテストを反復し、反復ごとに新しいスコアカード オブジェクトを作成し、最後に、それが最良の場合はリストに追加します (そうでない場合は、リスト内の既存のスコア カードのテストの数を変更するだけです)。 ):
liScoreCards.Add(SC);
学生のテストが 1 つしかない場合、リストの SC には Student オブジェクトが含まれます (テストのリストを取得するときに、クエリで "Include("Student")" を使用します。
将来のテストで、これを行ったときに(後のテストで)同じ学生を再び見つけた場合:(テストからの学生オブジェクトを新しいスコアカードオブジェクトに追加する) sc.Student = test.Student
リスト内: liScoreCards - 以前の SC object.Student は、そこにあった Student オブジェクトの代わりに NULL になります。
私は何を間違っていますか?
学生オブジェクトを新しい ScroeCard オブジェクトに割り当てると、リストに保存されている古いスコアカード オブジェクトから「削除」される可能性はありますか?
コードサンプル:
// Psuedo code:
liTest = DB.GetTests().Include("Student");
// Code:
List<ScoreCard> liScoreCard = new List<ScoreCard>();
foreach(Test st in liTest)
{
ScoreCard SC = new ScoreCard();
SC.Student = st.Student; // This line makes SC with the same StudentID in liScoreCard have the Student become null.
ScoreCard oldSC = liScoreCard.Find(x->x.StudentID == SC.StudentID);
// Some logic to see which grade is higher)
// either update oldSC or...
liScoreCard.Add(SC);
}
}