如何立即访问保存的行

How to instantly access the saved row

我用 EF 技术在 Asp MVC 中写了一些代码,我有条件行来查找今天日期的行,如果找不到我将它添加到数据库,然后将保存的行用于另一个进程,但是当我刷新错误页面时出现错误,它工作正常!我认为我的代码不能异步工作! 任何人都可以帮助我发现我的错误吗?

        public ActionResult LineRegimeSave(string breakFast, string snake1, string lunch, string snake2, string snake3,string dinner, string snake4,string adviseText, string docFooterId)
        {
            ApplicationDbContext myContext = new ApplicationDbContext();

            var docFooter = docFooterId != "null" ? myContext.DocFooters.Single(d => d.Id.ToString() == docFooterId) : null;
            var strLine="BreakFast,"+ breakFast + "/Snake1,"+ snake1 + "/Lunch,"+ lunch + "/Snake2,"+ snake2 + "/Snake3,"+ snake3 + "/Dinner,"+ dinner + "/Snake4,"+snake4;
            TriageRecord getMedicalRecId;
            var userId = Session["NID"];
            var userProfile = myContext.UserProfiles.Single(b => b.NationalId.ToString() == userId.ToString());

            getMedicalRecId = myContext.TriageRecords.Where(u => u.UserProfile.Id == userProfile.Id)
    .OrderByDescending(d => d.DateTime).First();
            if (getMedicalRecId.DateTime.Date != DateTime.Today)
            {
                TriageRecord insert = new TriageRecord
                {
                    Bust = getMedicalRecId.Bust,
                    Diastolic = getMedicalRecId.Diastolic,
                    HeartRate = getMedicalRecId.HeartRate,
                    Systolic = getMedicalRecId.Systolic,
                    Height = getMedicalRecId.Height,
                    Weight = getMedicalRecId.Weight,
                    Wrist = getMedicalRecId.Wrist,
                    Waist = getMedicalRecId.Waist,
                    Hips = getMedicalRecId.Hips,
                    UserProfile = getMedicalRecId.UserProfile,
                    DateTime = DateTime.Now
                };


                insert.MedicalRecord = new MedicalRecord
                {
                    TriageRecord = insert,
                    VisitDate = DateTime.Now,

                };
                myContext.TriageRecords.Add(insert);
                myContext.SaveChanges();
                getMedicalRecId = myContext.TriageRecords.Where(u => u.UserProfile.Id == userProfile.Id)
                    .OrderByDescending(d => d.DateTime).First();
                getMedicalRecId.MedicalRecord.MedicalRecordDetails.Add
                (
                    new MedicalRecordDetail
                    {

                        DateTime = DateTime.Now,
                        VisitMode = "LineDiet",
                        VisitSummary = strLine,
                        DocFooter = docFooter,
                        AdviseText = adviseText

                    }
                );

                myContext.SaveChanges();
            }
            else
            {
                getMedicalRecId.MedicalRecord.MedicalRecordDetails.Add
                (
                    new MedicalRecordDetail
                    {

                        DateTime = DateTime.Now,
                        VisitMode = "LineDiet",
                        VisitSummary = strLine,
                        DocFooter = docFooter,
                        AdviseText = adviseText

                    }
                );
                myContext.SaveChanges();
            }


            return RedirectToAction("LineRegimePrint",new { id = getMedicalRecId.Id});
        }

此行发生错误:

    getMedicalRecId.MedicalRecord.MedicalRecordDetails.Add
    (
        new MedicalRecordDetail
        {

            DateTime = DateTime.Now,
            VisitMode = "LineDiet",
            VisitSummary = strLine,
            DocFooter = docFooter,
            AdviseText = adviseText

        }
    );

错误文本是:空引用... 谢谢。


更新:

                insert.MedicalRecord = new MedicalRecord
                {
                    TriageRecord = insert,
                    VisitDate = DateTime.Now,

                };
                myContext.TriageRecords.Add(insert);
                myContext.SaveChanges();

我需要更改此代码吗?

                var a = insert.MedicalRecord = new MedicalRecord
                {
                    TriageRecord = insert,
                    VisitDate = DateTime.Now,

                };
                myContext.TriageRecords.Add(insert);
                myContext.MedicalRecords.Add(a);

因此根据您的说法,每当您尝试向列表中添加项目时都会出现问题,但它说该对象为空,因此您需要检查一下。

      public ActionResult LineRegimeSave(string breakFast, string snake1, string lunch, string snake2, string snake3,string dinner, string snake4,string adviseText, string docFooterId)
      {
        ...

            getMedicalRecId = myContext.TriageRecords.Where(u => u.UserProfile.Id == userProfile.Id).OrderByDescending(d => d.DateTime).First();
            if(getMedicalRecId != null) {
                if (getMedicalRecId.DateTime.Date != DateTime.Today)
                {
                    ...
                    insert.MedicalRecord = new MedicalRecord
                    {
                        TriageRecord = insert,
                        VisitDate = DateTime.Now,
                        MedicalRecordDetails = new List<MedicalRecordDetail>(){ new MedicalRecordDetail
                        {
                            DateTime = DateTime.Now,
                            VisitMode = "LineDiet",
                            VisitSummary = strLine,
                            DocFooter = docFooter,
                            AdviseText = adviseText
                        }
                   };
                myContext.SaveChanges();
                }
            }
            else
            {
                ....
            }
        else
        {
            throw new Exception("The current user profile has no triage records!");
        }

        return RedirectToAction("LineRegimePrint",new { id = getMedicalRecId.Id});
    }