0

この問題に頭を悩ませています: ICollection に単一のエントリを追加する方法はありますか? 一度に 1 つずつ、追加された各エントリのデータをデータベースに永続化しますか?

ここに私の特定の状況があります:

私はテストモデルを持っています:

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 に単一のエントリを追加する方法はありますか? 一つずつ?

私が行った多くの試みの1つ

助けてくれてありがとう!

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 に答える