0

Using Fluent API as OR/M and achieved UNIQUE for following column as mentioned in this SO post.

For Server Side Validation below code works fine:

[HttpPost]
public ActionResult Save(Company company)
{
    try
    {
        if (company.Id == 0)
            _context.Companies.Add(company);
        else
        {
            var companyInDb = _context.Companies.Single(c => c.Id == company.Id);
            companyInDb.Name = company.Name;
        }
        _context.SaveChanges();
        return RedirectToAction("Index", "Companies");
    }
    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
    {
        var error = ex.EntityValidationErrors.First().ValidationErrors.First();
        this.ModelState.AddModelError(error.PropertyName, error.ErrorMessage);
        return View("CompanyForm");
    }
}

How to Validate for Unique values in server side?

tried below code as catch no response at all

catch (System.Data.SqlClient.SqlException ex)
{
    this.ModelState.AddModelError("Duplicate Value", ex.Message);
    return View("CompanyForm");
}
Community
  • 1
  • 1
Syed Nizamudeen
  • 440
  • 3
  • 7
  • 25

1 Answers1

0

You can try this:

using System.Data.Entity.Infrastructure;
//....

catch (DbUpdateException e) when ((e?.InnerException?.InnerException as System.Data.SqlClient.SqlException)?.Number == 2601)
{    
    this.ModelState.AddModelError("NameOfColumn", "Item with such NameOfColumn already exist");
}
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
    var error = ex.EntityValidationErrors.First().ValidationErrors.First();
    this.ModelState.AddModelError(error.PropertyName, error.ErrorMessage);
}
return View("CompanyForm");
Slava Utesinov
  • 13,410
  • 2
  • 19
  • 26
  • your solution working but how to get property name dynamically? – Syed Nizamudeen Mar 09 '17 at 13:46
  • Exception contains name of unique constraint, so if e.ToString() contains IX_MyColumn that mean property name is MyColumn. So you should create mappings collection(constraint-column) and check each of them on existence in exception. – Slava Utesinov Mar 09 '17 at 16:03