I have the following Action method inside my Asp.net mvc web application:-
[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); }
which calls the following method:-
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); } }
My model class is as follow:-
public partial class TMSStorageDevice { public int TMSStorageDeviceID { get; set; } public string Name { get; set; } public Nullable<decimal> 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; } }
but if i call the Create action method i will get the following 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:\Users\Administrator\Documents\Visual Studio 2012\Projects\TMS\TMS\Models\Repository.cs:line 1926 at TMS.Controllers.StorageDeviceController.Create(SDJoin sdj, FormCollection formValues) in c:\Users\Administrator\Documents\Visual Studio 2012\Projects\TMS\TMS\Controllers\StorageDeviceController.cs:line 160 InnerException:
Can anyone advice what is wrong, as i double check my code and every thing should work fine ? Thanks
Returns. The number of state entries written to the underlying database. This can include state entries for entities and/or relationships.
Error: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. solution: correct your Data Model according to your database SET fieldNames or length.
EntityValidationErrors is a collection which represents the entities which couldn't be validated successfully, and the inner collection ValidationErrors per entity is a list of errors on property level. These validation messages are usually helpful enough to find the source of the problem.
You haven't shown the Save()
method but if you can add code like this to it you'll get an exception that contains all the details you're looking for
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; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With