4

したがって、特にEntity Framework Codeが最初にデータベースを作成および管理する方法のために、私はASP.NETMVC3プログラミングに比較的慣れていません。

それで、私は栄養士が患者を評価することを可能にしなければならない統合栄養システムに取り組んでいます。そのため、最初に、システムは、栄養士のID、患者のID、および日時の両方を取得して、予定を設定することを許可します。アポイントメントが終了すると、Nitritionistはアポイントメントを更新し、特定の患者がどれだけ食べることができるかを含むnutritionistValuationテーブルを含めることができる必要があります。

だから、私のクラスは次のとおりです

モデル:NutritionalEvaluation.cs

    public class NutritionalEvaluation
{
    [ScaffoldColumn (false)]
    public virtual int ID { get; set; }
    public virtual int KiloCal { get; set; }
    public virtual int Proteines { get; set; }
    public virtual int Carbs { get; set; }
    public virtual int Fiber { get; set; }
    public virtual int Fats { get; set; }
    public virtual int Cholesterol { get; set; }
    public virtual int Water { get; set; }
    public virtual int Alcohol { get; set; } 
}

モデル:PatientAppointment.cs

    public class PatientAppointment
{
    public virtual int ID { get; set; }
    public virtual int IDClient { get; set; }
    public virtual int IDNutritionist { get; set; }
    public virtual DateTime Date { get; set; }
    public virtual String Comments { get; set; }
    public virtual NutritionalEvaluation Valuation { get; set; }
}

ご覧のとおり、NutritionalValuationはPatientAppointmentのフィールドです。

ビュー:EvaluateAppointment.cshtml @model NutricionApp.Models.PatientAppointment

    @{
        ViewBag.Title = "Valuation";
    }

    <h2>Valuation</h2>

    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"         type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>PatientAppointment</legend>

    @Html.HiddenFor(model => model.ID)
    @Html.HiddenFor(model => model.IDClient)
    @Html.HiddenFor(model => model.IDNutritionist)

(これに先立って、PatientAppointmentが作成され、IDClientフィールドとIDNutritionistフィールドの両方が入力されています。)

    <div class="editor-label">
        @Html.LabelFor(model => model.Date)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Date)
        @Html.ValidationMessageFor(model => model.Date)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Comments)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Comments)
        @Html.ValidationMessageFor(model => model.Comments)
    </div>
    <!--
    <div class="editor-label">
        @Html.LabelFor(model => model.Valuation)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Valuation)
        @Html.ValidationMessageFor(model => model.Valuation)
    </div>

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>

MVCは、NutritionalEvaluationを別のフィールドのセットとしてレンダリングし、そのクラスのすべてのフィールドをビュー内に含めるのに十分なほどスマートです。私の問題は、フォームをサブミットしようとすると(技術的には、日付を変更し、コメントを追加してから、NutritionalEvaluationフィールドを追加できるはずです)、NutritionalEvaluationはすべてテーブルに保存されるということです。nullのままで、NutritionalValueテーブルは空のままです。私に何ができる?

編集1:

コントローラー:PatientAppointmentController.cs

    namespace NutritionApp.Controllers
    {
        [Authorize]
        public class PatientAppointmentController : Controller
        {
            private NutritionDB db = new NutritionDB();

..。

    public ActionResult EvaluateAppointment(int ID)
    {
        PatientAppointment appoint = db.PatientAppointment.Find(ID);
        return View(appoint);
    }

    [HttpPost]
    public ActionResult EvaluateAppointment(PatientAppointment appoint)
    {
        if (ModelState.IsValid)
        {
            db.Entry(appoint).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(appoint);
    }

    public ActionResult ViewAppointments()
    {
        return View();
            }

        }
    }
4

1 に答える 1

0

この PC には Visual Studio がインストールされていないため、これをテストできませんでした...

Entity Framework Code First アプローチを使用していると仮定すると、NutritionalEvaluationクラスにはクラスへの外部キー関係がありませんPatientAppointment。1 対 1 の関係があると仮定して、次のように変更NutritionalEvaluationします。

public class NutritionalEvaluation
{
    [ScaffoldColumn (false)]
    public virtual int ID { get; set; }

    // This is the name of the navigation property defined below
    [ForeignKey("PatientAppointment")]
    public virtual int AppointmentID { get; set; }

    public virtual int KiloCal { get; set; }
    public virtual int Proteines { get; set; }
    public virtual int Carbs { get; set; }
    public virtual int Fiber { get; set; }
    public virtual int Fats { get; set; }
    public virtual int Cholesterol { get; set; }
    public virtual int Water { get; set; }
    public virtual int Alcohol { get; set; }

    // Add navigation property to PatientAppointment
    public virtual PatientAppointment PatientAppointment { get; set; }
}
于 2012-11-20T02:12:39.357 に答える