Asp.net mvc 4 向ICollection动态添加单个条目,一次添加一个条目(MVC4 EF)

Asp.net mvc 4 向ICollection动态添加单个条目,一次添加一个条目(MVC4 EF),asp.net-mvc-4,model,persist,icollection,Asp.net Mvc 4,Model,Persist,Icollection,我很难理解这个问题:有没有办法向ICollection添加一个条目?一次一个,为添加的每个条目将数据持久化到数据库 以下是我的具体情况: 我有一个测试模型: public partial class Test { public Test() { this.Students = new HashSet<Student>(); this.Questions = new HashSet<Question>(); }

我很难理解这个问题:有没有办法向ICollection添加一个条目?一次一个,为添加的每个条目将数据持久化到数据库

以下是我的具体情况:

我有一个测试模型:

public partial class Test
{
    public Test()
    {
        this.Students = new HashSet<Student>();
        this.Questions = new HashSet<Question>();
    }

    public int Id { get; set; }
    public string name { get; set; }
    public string description { get; set; }

    public virtual ICollection<Student> Students { get; set; }
    public virtual ICollection<Question> Questions { get; set; }
}
它没有向db添加任何问题。有什么想法吗

编辑:我尝试过的将问题输入数据库的唯一代码是:

public void AddQuestionToTest(Test test, Question question)
{
    question.Test = test;
    Insert(question);
    SaveChanges();
}

…但这会在数据库中使用相同的名称/描述进行另一个测试,但新的id已增加。

我可能在这里遗漏了一些内容,但这不起作用吗

test.Questions.Add(new Question{ Id = 1, query = "set your question up here" });

然后,您需要通过EF更新并保存对测试的更改,以将其保留回数据库。

这看起来像是一个简单的疏忽,但以下是我所做的错误:

我正在数据库中用一个测试对象创建一个新的测试。然后我尝试使用同一个对象来设置Question.Test。当我将问题插入数据库时,这导致创建了一个新的测试

在将新测试插入数据库后,我必须查询数据库以查找该测试,并将该测试分配给Question.test

这似乎很奇怪,因为它与我坚持的测试完全相同,但我猜在幕后发生了一些我不知道的事情


感谢levelins对您的帮助。我真的很感激。

似乎对我不起作用。添加到问题以显示我尝试的内容。是否需要先插入问题,然后将其添加到测试和更新?如果我插入(问题)。该问题被持久化到数据库中,但它复制了另一个ID递增1的测试。但该测试具有相同的名称和描述。请确保该问题仅在插入并尝试保存后添加到测试中。我对我的问题补充了一点。非常感谢你的帮助,我真的很感激。今天已经做了10个小时了。听起来你在保存测试后没有得到测试的id。就EF而言,
Id
是主键吗?请参见此处:-
Insert()
返回插入的实体的id,并且您的
test
需要它的
id
属性集,否则EF会认为它是新实体,然后再次尝试插入
public void AddQuestionToTest(Test test, Question question)
{
    question.Test = test;
    Insert(question);
    SaveChanges();
}
test.Questions.Add(new Question{ Id = 1, query = "set your question up here" });