0

我很难解决这个问题:有没有办法将单个条目添加到 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; }
}

测试包含一组问题。问题模型:

public partial class Question
{
    public Question()
    {
        this.Answers = new HashSet<Answer>();
    }

    public int Id { get; set; }
    public string query { get; set; }

    public virtual Test Test { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
}

我的目标是让用户能够创建一个带有名称和描述的测试,然后动态地将问题添加到该测试中,直到他们满意为止。到目前为止,创建测试很容易,但是用问题加载测试对我来说是一个挑战。我曾设想过一种表单,可以将 Question 和 Test.Id 提交给控制器操作,控制器操作会将数据保存到数据库中。但我不明白如何将问题动态添加到测试的 ICollection 中。

有没有办法将单个条目添加到 ICollection?一次一个?

我做过的许多尝试之一

非常感谢您的帮助!

回应levelnis:我试过这个没有运气

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

它不会向数据库添加任何问题。有任何想法吗?

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

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

..但这会使数据库中的另一个测试具有相同的名称/描述,但新的 id 已增加。

4

2 回答 2

0

我可能在这里遗漏了一些东西,但这不起作用吗?

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

然后,您需要通过 EF 更新和保存测试更改,以将其持久保存回数据库。

于 2013-03-02T21:38:42.737 回答
0

这似乎是一个简单的忽视,但这是我做错的事情:

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

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

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

感谢 levelins 的帮助。对此,我真的非常感激。

于 2013-03-03T01:44:44.580 回答