这是一个很难描述的。我有一个带有表格测试和表格学生以及记分卡的数据库。每个测试都有一个学生的 FK,记分卡也是如此。
学生可以多次参加考试,因此可以有许多指向同一学生的考试记录。
我目前仅在内存中使用记分卡。我有这些记分卡对象的列表:liScoreCard。我遍历所有测试,每次迭代我创建一个新的记分卡对象,最后 - 如果它是最好的 - 我将它添加到列表中(如果不是,我只需更改列表中已经存在的记分卡上的测试数量):
liScoreCards.Add(SC);
如果学生只有一个测试,则列表中的 SC 包含学生对象(当我获得测试列表时,我在查询中使用“Include("Student")”。
如果在以后的测试中我再次找到同一个学生(在以后的测试中),当我这样做时:(将学生对象从测试添加到新的记分卡对象)sc.Student = test.Student
在列表中: liScoreCards - 前一个 SC object.Student 变为 NULL 而不是那里的 Student 对象。
我究竟做错了什么 ?
将学生对象分配给新的 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);
}
}