实体框架4.2:获取正确的数据库错误在我的ASP.NETMVC3应用程序中,我使用的是EF4.2。在我的数据库中,我对列有唯一约束。我尝试插入相同的数据以查看得到的结果,但出现以下错误:更新条目时出错。有关更多详细信息,请参阅内部异常在内部异常中,我可以看到有关唯一约束的完整错误。但是如何才能唯一捕获这个异常来告诉用户:你又输入了同样的值。这是我目前所做的:尝试{UpdateModel(conditionType,null,null,newstring[]{"ConditionTypeId"});_conditionTypeRepository.Save();返回RedirectToAction("条件类型");}catch(Exceptionex){ModelState.AddModelError("","更新时出错:"+ex.Message);但这是一种通用方法。我想做的是提供一个特定的信息。有任何想法吗?编辑:我尝试了以下但这次它没有捕获它:catch(SqlExceptionex){if(ex.Number==2627){ModelState.AddModelError("","Youareenteringthesamevalueagain.");}ModelState.AddModelError("","更新值时出错:"+ex.Message);我仔细研究了一下,结果发现它抛出了一个类型为System.Data.Entity.Infrastructure.DbUpdateException的异常,它不包含异常编号。编辑:这是我解决问题的方法,但我相信这不是解决问题的最佳方法。知道如何重构这段代码吗?catch(Exceptionex){if(ex.InnerException.InnerException.GetType()==typeof(SqlException)){if(((SqlException)ex.InnerException.InnerException).Number==2627)ModelState.AddModelError("","您再次输入相同的值。");elseModelState.AddModelError("","更新值时出错:"+ex.Message);}else{ModelState.AddModelError("","更新值时出错:"+ex.Message);你可以做这样的事情来找到SqlException的内部异常,然后以不同的方式处理SqlException。catch(Exceptionex){Exceptioncurrent=ex;SqlExceptionse=null;做{se=current.InnerExceptionasSqlException;current=current.InnerException;}while(current!=null&&se==null);if(se!=null){//在这里做你的SqlException处理}else{//在这里做其他异常处理}}要得到最里面的Exception,你可以这样做:SqlExceptionse=null;接下来的例外=ex;while(next.InnerException!=null){se=next.InnerExceptionasSqlException;next=next.InnerException;}if(se!=null){//在这里进行SqlException处理}else{//在这里进行其他异常处理}也可以使用GetBaseException()方法,因为这会导致根本原因异常,即SqlException。以上就是C#学习教程:entityframework4.2:Getthecorrectdatabase错误分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
