首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取{“对一个或多个实体的验证失败”。有关更多详细信息,请参见'EntityValidationErrors‘属性。}一个示例,而不是另一个示例。

获取{“对一个或多个实体的验证失败”。有关更多详细信息,请参见'EntityValidationErrors‘属性。}一个示例,而不是另一个示例。
EN

Stack Overflow用户
提问于 2020-07-24 00:08:19
回答 1查看 147关注 0票数 1

我试图从一些问卷调查中获取结果,然后将结果发送到某个API进行评分,并将结果返回,在成功返回结果后,将其作为对象保存到实体。

这是我的代码:(不重要的数据被星星替换)

代码语言:javascript
复制
internal static List<ScreeningTool> GetSurveyResults(OpenCase openCase, int screeningToolId, short screeningId)
    {
        using (var cmDb = new DBEntities())
        {
            var currentScreeningTool = cmDb.ScreeningTools.Find(openCase.CaseId, screeningToolId, screeningId);
            var SFClient = new Core.OptumSurveySF10.amIhealthySoapClient();

            var Key = "*******************************";
            var GroupId = *****;
            var GroupLogin = "*******";
            var SurveyId = *****;
            var SiteLogin = "*************";
            short AdministrationType = 5;
            var AdministrationDate = DateTime.Now.ToShortDateString();
            short SessionType = 3;
            var Age = (DateTime.Today.Year - openCase.BirthDate.Value.Year - (openCase.BirthDate.Value.DayOfYear > DateTime.Today.DayOfYear ? 1 : 0));
            var DOB = openCase.BirthDate.Value.ToShortDateString();
            var Gender = "";

            if(screeningToolId == 15)
            {
                SurveyId = 52304;
                var GH01_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 1).Select(a => a.AnswerId).First();
                var PF02_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 3).Select(a => a.AnswerId).First();
                var PF04_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 4).Select(a => a.AnswerId).First();
                var RP02_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 6).Select(a => a.AnswerId).First();
                var RP03_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 7).Select(a => a.AnswerId).First();
                var RE02_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 9).Select(a => a.AnswerId).First();
                var RE03_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 10).Select(a => a.AnswerId).First();
                var BP02_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 11).Select(a => a.AnswerId).First();
                var MH03_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 13).Select(a => a.AnswerId).First();
                var VT02_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 14).Select(a => a.AnswerId).First();
                var MH04_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 15).Select(a => a.AnswerId).First();
                var SF02_Response = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 16).Select(a => a.AnswerId).First();
                var MH01_Response = -1;
                var MH02_Response = -1;
                var MH05_Response = -1;
                var HT_Response = -1;
                System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

                var results = SFClient.SF12v2Session(Key, GroupId, GroupLogin, SiteLogin, SurveyId, AdministrationType, AdministrationDate, SessionType, openCase.CaseId, "", "", "", Gender, GH01_Response, PF02_Response, PF04_Response, RP02_Response,
                        RP03_Response, RE02_Response, RE03_Response, BP02_Response, MH03_Response, VT02_Response, MH04_Response, SF02_Response, MH01_Response,
                        MH02_Response, MH05_Response, HT_Response, "", "");
                   

                if (results.Scored)
                {
                    var pcsFormat = Math.Sqrt(Math.Pow(results.PCSScore, 2));
                    var mcsFormat = Math.Sqrt(Math.Pow(results.MCSScore, 2));
                    var pcs = String.Format("{0:0.00}", pcsFormat);
                    var mcs = String.Format("{0:0.00}", mcsFormat);

                    var screeningToolAnswer17 = new ScreeningToolAnswer();
                    screeningToolAnswer17.CaseId = openCase.CaseId;
                    screeningToolAnswer17.ScreeningToolId = screeningToolId;
                    screeningToolAnswer17.ScreeningId = screeningId;
                    screeningToolAnswer17.InfoInsertId = currentScreeningTool.InfoInsertId;
                    screeningToolAnswer17.InfoInsertTime = DateTime.Now;
                    screeningToolAnswer17.InfoChangeId = currentScreeningTool.InfoInsertId;
                    screeningToolAnswer17.InfoChangeTime = DateTime.Now;
                    screeningToolAnswer17.QuestionId = 17;
                    screeningToolAnswer17.AnswerId = 1;
                    screeningToolAnswer17.AnswerText = pcs;


                    var screeningToolAnswer18 = new ScreeningToolAnswer();
                    screeningToolAnswer18.CaseId = openCase.CaseId;
                    screeningToolAnswer18.ScreeningToolId = screeningToolId;
                    screeningToolAnswer18.ScreeningId = screeningId;
                    screeningToolAnswer18.InfoInsertId = currentScreeningTool.InfoInsertId;
                    screeningToolAnswer18.InfoInsertTime = screeningToolAnswer17.InfoInsertTime;
                    screeningToolAnswer18.InfoChangeId = currentScreeningTool.InfoChangeId;
                    screeningToolAnswer18.InfoChangeTime = screeningToolAnswer17.InfoInsertTime;
                    screeningToolAnswer18.QuestionId = 18;
                    screeningToolAnswer18.AnswerId = 1;
                    screeningToolAnswer18.AnswerText = mcs;

                    cmDb.ScreeningToolAnswers.Add(screeningToolAnswer17);
                    cmDb.ScreeningToolAnswers.Add(screeningToolAnswer18);
                    cmDb.SaveChanges();
                }
                else
                {
                    return null;
                }
            }
            else if(screeningToolId == 14)
            {

                var FirstName = "";
                var LastName = "";
                var MemberLogin = openCase.CaseId;

                var GHGLOBALResponse = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 1).Select(a => a.AnswerId).First();
                var PFSOMEResponse = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 3).Select(a => a.AnswerId).First(); ;
                var PFBENDResponse = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 4).Select(a => a.AnswerId).First(); ;
                var RPKINDResponse = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 5).Select(a => a.AnswerId).First(); ;
                var REBKINDResponse = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 6).Select(a => a.AnswerId).First(); ;
                var BPGLOBALResponse = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 7).Select(a => a.AnswerId).First(); ;
                var SEFRIENDResponse = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 8).Select(a => a.AnswerId).First(); ;
                var SEOVERALLResponse = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 9).Select(a => a.AnswerId).First(); ;
                var MHUPSETResponse = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 10).Select(a => a.AnswerId).First(); ;
                var BEGLOBALResponse = currentScreeningTool.ScreeningToolAnswers.Where(x => x.QuestionId == 11).Select(a => a.AnswerId).First(); ;

                var result = SFClient.SF10R1Session(Key, GroupId, GroupLogin, SiteLogin, SurveyId, AdministrationType, AdministrationDate, SessionType,
                            MemberLogin, FirstName, LastName, DOB, Age, Gender, GHGLOBALResponse, PFSOMEResponse, PFBENDResponse,
                            RPKINDResponse, REBKINDResponse, BPGLOBALResponse, SEFRIENDResponse, SEOVERALLResponse,
                            MHUPSETResponse, BEGLOBALResponse);

                if (result.Scored)
                {
                    var phs = String.Format("{0:0.00}", result.PHS10Score);
                    var pss = String.Format("{0:0.00}", result.PSS10Score);

                    var screeningToolAnswer12 = new ScreeningToolAnswer();
                    screeningToolAnswer12.CaseId = openCase.CaseId;
                    screeningToolAnswer12.ScreeningToolId = screeningToolId;
                    screeningToolAnswer12.ScreeningId = screeningId;
                    screeningToolAnswer12.InfoInsertId = currentScreeningTool.InfoInsertId;
                    screeningToolAnswer12.InfoInsertTime = DateTime.Now;
                    screeningToolAnswer12.InfoChangeId = currentScreeningTool.InfoChangeId;
                    screeningToolAnswer12.InfoChangeTime = screeningToolAnswer12.InfoInsertTime;
                    screeningToolAnswer12.QuestionId = 12;
                    screeningToolAnswer12.AnswerId = 1;
                    screeningToolAnswer12.AnswerText = phs;


                    var screeningToolAnswer13 = new ScreeningToolAnswer();
                    screeningToolAnswer13.CaseId = openCase.CaseId;
                    screeningToolAnswer13.ScreeningToolId = screeningToolId;
                    screeningToolAnswer13.ScreeningId = screeningId;
                    screeningToolAnswer13.InfoInsertId = currentScreeningTool.InfoInsertId;
                    screeningToolAnswer13.InfoInsertTime = screeningToolAnswer12.InfoInsertTime;
                    screeningToolAnswer12.InfoChangeId = currentScreeningTool.InfoChangeId;
                    screeningToolAnswer12.InfoChangeTime = screeningToolAnswer12.InfoInsertTime;
                    screeningToolAnswer13.QuestionId = 13;
                    screeningToolAnswer13.AnswerId = 1;
                    screeningToolAnswer13.AnswerText = pss;

                    cmDb.ScreeningToolAnswers.Add(screeningToolAnswer12);
                    cmDb.ScreeningToolAnswers.Add(screeningToolAnswer13);
                    cmDb.SaveChanges();
            }

            return cmDb.ScreeningTools.Where(x => x.ScreeningToolId == screeningToolId && x.CaseId == openCase.CaseId && x.ScreeningId == screeningId).ToList();
        }
    }

由于某些原因,ScreeningToolId == 15的条件很好,我能够提交多份问卷没什么问题,但是当ScreeningToolId == 14{"Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."}看ValidationErrors时没有多大帮助。

当我查找它时,到处都提到要将cmDb.SaveChanges();封装在一个try块中,所以我将它包装为:

代码语言:javascript
复制
try
                    {
                        cmDb.SaveChanges();
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException e)
                    {
                        foreach(var eve in e.EntityValidationErrors)
                        {
                            Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                eve.Entry.Entity.GetType().Name, eve.Entry.State);
                            foreach( var ve in eve.ValidationErrors)
                            {
                                Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                    ve.PropertyName, ve.ErrorMessage);
                            }
                        }
                        throw;
                    }

它返回"OriginalValues不能用于添加状态的实体“的消息。和'(new System.Collections.Generic.Mscorlib_CollectionDebugView<System.Data.Entity.Validation.DbEntityValidationResult>(($exception).EntityValidationErrors).Items[0]).Entry.OriginalValues' threw an exception of type 'System.InvalidOperationException'

这应该是try/catch块的两个输出之一。但我没看到另一个。它显示的例外对我来说毫无意义。DBContext.SaveChanges()怎么可能不是有效的操作?

对不起,如果我错过了重要的信息,如果你需要什么,让我知道,我会添加它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-27 14:40:28

在定义screeningtoolanswer13的地方,有两行带有错误的行,而不是screeningtoolanswer12。这就是导致这个问题的原因。修正了错误,现在它运行得完美无缺。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63064910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档