SaveChanges()上的validation错误
我的Asp.net mvc Web应用程序中有以下Action方法: –
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(SDJoin sdj, FormCollection formValues) { Try { //code goes here repository.InsertOrUpdateSD(sdj.StorageDevice, User.Identity.Name, assetid); repository.Save(); } catch (Exception ex) { //code goes here } PopulateViewBagData(); return View(sdj); }
它调用以下方法: –
public void InsertOrUpdateSD(TMSStorageDevice sd, string username, long assetid) { var resource = entities.Resources.AsNoTracking().SingleOrDefault(a => a.RESOURCEID == assetid); if (sd.TMSStorageDeviceID == default(int)) { // New entity int technologyypeID = GetTechnologyTypeID("Storage Device"); Technology technology = new Technology { IsDeleted = true, IsCompleted = false, TypeID = technologyypeID, Tag = "SD" + GetTagMaximumeNumber2(technologyypeID).ToString(), StartDate = DateTime.Now, IT360ID = assetid }; InsertOrUpdateTechnology(technology); Save(); sd.TMSStorageDeviceID = technology.TechnologyID; tms.TMSStorageDevices.Add(sd); } }
我的模型类如下: –
public partial class TMSStorageDevice { public int TMSStorageDeviceID { get; set; } public string Name { get; set; } public Nullable size { get; set; } public int RackID { get; set; } public string CustomerName { get; set; } public string Comment { get; set; } public byte[] timestamp { get; set; } public virtual Technology Technology { get; set; } public virtual TMSRack TMSRack { get; set; } }
但如果我调用Create动作方法,我将得到以下exception: –
System.Data.Entity.Validation.DbEntityValidationException was caught HResult=-2146232032 Message=Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. Source=EntityFramework StackTrace: at System.Data.Entity.Internal.InternalContext.SaveChanges() at System.Data.Entity.Internal.LazyInternalContext.SaveChanges() at System.Data.Entity.DbContext.SaveChanges() at TMS.Models.Repository.Save() in c:UsersAdministratorDocumentsVisual Studio 2012ProjectsTMSTMSModelsRepository.cs:line 1926 at TMS.Controllers.StorageDeviceController.Create(SDJoin sdj, FormCollection formValues) in c:UsersAdministratorDocumentsVisual Studio 2012ProjectsTMSTMSControllersStorageDeviceController.cs:line 160 InnerException:
任何人都可以建议什么是错的,因为我仔细检查我的代码,每件事都应该正常工作? 谢谢
您尚未显示Save()
方法,但如果您可以向其添加此类代码,则会收到包含您要查找的所有详细信息的exception
try { _context.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException dbEx) { Exception raise = dbEx; foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { string message = string.Format("{0}:{1}", validationErrors.Entry.Entity.ToString(), validationError.ErrorMessage); // raise a new exception nesting // the current instance as InnerException raise = new InvalidOperationException(message, raise); } } throw raise; }
我知道这个问题现在已经过时了,但我希望有人发现这个问题也很有用。
- 最有可能(实际上,根据您的评论判断) 错误是您的变量未通过模型validation。
- 查看您无法看到的错误( 不更改代码 )的另一种方法是使用QuickWatch窗口查看exception。 问题是您可以从exception工具提示打开的“查看详细信息”窗口不显示EntityValidationErrors。 如果没有catch块,您可以在QuickWatch中查看任何exception变量。 幸运的是,QuickWatch有PseudoVariables。 因此,使用“$ exception”伪变量,您可以轻松查看QuickWatch窗口中当前未处理的exception。 (请参阅下面的屏幕截图) Exception Details窗口和QuickWatch窗口,带有$ exception伪变量
虽然这是一个老post,但这种方法可以更有成效!
积分
尝试这样的事情
上述就是C#学习教程:SaveChanges()上的validation错误分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
try { pcontext.SaveChanges(); } catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException ex) { Console.WriteLine(ex.InnerException); } catch (System.Data.Entity.Core.EntityCommandCompilationException ex) { Console.WriteLine(ex.InnerException); } catch (System.Data.Entity.Core.UpdateException ex) { Console.WriteLine(ex.InnerException); } catch (System.Data.Entity.Infrastructure.DbUpdateException ex) //DbContext { Console.WriteLine(ex.InnerException); } catch (Exception ex) { Console.WriteLine(ex.InnerException); throw; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1010324.html