0

トレーニングのために人々を登録するために使用されるページがあります。現在のページには、登録する人を選択するためのドロップダウン、コースを選択するためのドロップダウン、およびコースが提供されるセッションを選択するためのドロップダウンがあります。ユーザーが一度に 1 人につき最大 4 つのクラスを登録できるように、コースとセッションのドロップダウンの 4 つのグループを持つようにページを変更することが要求されています。現在、フォームの投稿をどのように処理するかという問題が発生します。以前は、ユーザーがコースに人を追加しようとすると、エンティティ フレームワーク モデル バインドに既に登録されていたため、エラーがキャッチされ、エラー メッセージがフォームに返されていました。同時に評価して保存するインスタンスが 4 つあるため、このバインドを実装する方法がわかりません。私は MVC と EF の初心者なので、ヘルプや指示をいただければ幸いです。

編集: 以下は、元のコントローラーの保存機能の一部です。

    var AddToCourse = new Session_Registrant()
{
    RegistrantID = RegistrantID,
    SessionID = Session1,
    RegistrantOrg = regOrg,
    RegistrantTitle = title,
    RegistedDate = DateTime.Now

};
//attempt to save
try
{
    if (ModelState.IsValid)
    {
        db.AddToSession_Registrant(AddToCourse);
        db.SaveChanges();
    }
}
catch (DataException error)
{
    if (error.InnerException != null)
    {
        if (error.InnerException.Message.Contains("UNIQUE KEY constraint"))
        {
            //adding custom error message to explain the failure
            ModelState.AddModelError("", "Error! Registrant has already been added to this course session.");
        }
    }
    else
    {
        ModelState.AddModelError("Error", error.Message);
    }
}
4

1 に答える 1

1

問題は実装ではなく機能の設計にあるのだろうか。問題は、登録者エンティティとコース/セッション エンティティ間の 1 対多の関係の観点から定義する必要があります。

私はまた、設計の一部として例外を使用することは悪い習慣であり、これは定義の問題であると考えています。あなた(あなたのコード)は次のような質問をしているはずです:

  • これは登録された学生ですか
  • この学生は、このセッションですでにコースを予約していますか
  • この学生は別のセッションのコースにすでに登録されていますか?

言い換えれば、ビジネスルールを定義して実装すれば、問題は SMOC (コーディングの小さな問題) に解決されるはずです。

この回答が直接的に役に立たない場合は申し訳ありませんが、これは間違った出発点だと思います. とにかく頑張ってください。

于 2012-09-18T11:52:55.017 に答える