コードファーストのアプローチでEntity Framework 5を使用しています。
私はテストシステムをやろうとしています。1 対 1 および 1 対多の関係を持つ 5 つのクラスがあります。1 つの Test には 1 つの TestInfo があり、1 つの User には多くの TestResult があり、1 つの TestResult には 1 つの TestInfo と多くの QuestionResult があります。これらは次のとおりです (いくつかの単純な値型プロパティは除きます)。
public class TestInfo
{
    [Key]
    public virtual string Name { get; set; }
    public virtual TimeSpan Duration { get; set; }
}
public class Test
{
    [Key]
    public virtual int TestId { get; set; }
    public virtual TestInfo Info { get; set; }
    //some other stuff
    //...
}
public class User
{
    [Key]
    public virtual string Login { get; set; }
    List<TestResult> _results = new List<TestResult>();
    public virtual List<TestResult> Results
    {
        get { return _results; }
        set { _results = value; }
    }
    //...
}
public class TestResult
{
    [Key]
    public virtual int TestResultId { get; set; }
    public virtual TestInfo TestInfo { get; set; }
    //...
    private List<QuestionResult> _questionResults = new List<QuestionResult>();
    public virtual List<QuestionResult> QuestionResults
    {
        get { return _questionResults; }
        set { _questionResults = value; }
    }
}
public class QuestionResult
{
    [Key]
    public virtual int QuestionResultId { get; set; }
    //...
}
私の文脈:
class TestContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Test> Tests { get; set; }
}
既存のテストの既存のユーザーに新しい TestResult を追加しようとしています (TestInfo は同じです):
public void AddTestResult(TestResult result)
{
    User user = _context.Users.Include(u => u.Results).FirstOrDefault(u => u.Login == _currentLogin);
    TestInfo existingTestInfo = _context.Tests.Where(t => t.Info.Name == result.TestInfo.Name).FirstOrDefault().Info;
    result.TestInfo = existingTestInfo;
    user.Results.Add(result);
    _context.SaveChanges();
}
このようにすると、EF は例外をスローします。
{"PRIMARY KEY 制約 'PK_dbo.TestInfoes' に違反しています。オブジェクト 'dbo.TestInfoes' に重複するキーを挿入できません。重複するキーの値は (最初のテスト) です。\r\nステートメントは終了しました。"}
TestResult クラスから QuestionResults プロパティを削除すると、すべて正常に動作します。私には奇妙に思えます。私は何を間違っていますか?