Validation Error on SaveChanges() c# entity-framework


I have the following Action method inside my mvc web application:-

public ActionResult Create(SDJoin sdj, FormCollection formValues)
        //code goes here
        repository.InsertOrUpdateSD(sdj.StorageDevice, User.Identity.Name, assetid);
    catch (Exception ex)
        //code goes here
    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


        sd.TMSStorageDeviceID = technology.TechnologyID;

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
  Message=Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
       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

Can anyone advice what is wrong, as i double check my code and every thing should work fine ? Thanks

10/22/2013 3:11:00 PM

Accepted Answer

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

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}", 
            // raise a new exception nesting
            // the current instance as InnerException
            raise = new InvalidOperationException(message, raise);
    throw raise;
10/22/2013 2:59:05 PM

Popular Answer

I know the question is old now, but I hope someone finds this useful, too.

  1. Most likely (and indeed, judging by your comments) the error was that your variable doesn't pass Model validation.
  2. The other way to see the errors you couldn't see (without changing the code) is to look at the exception using the QuickWatch window. The problem is that 'View Details' window that you can open from exception tooltip doesn't show EntityValidationErrors. And without a catch block you don't have any exception variable you can look at in QuickWatch. Luckily, QuickWatch has PseudoVariables. So, using "$exception" pseudovariable you can easily take a look at the current unhandled exception in QuickWatch window. (Please, see screenshots below) Exception Details window and QuickWatch window with $exception pseudovariable

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow