Не удается обновить данные в базе данных из-за исключения проверки сущности - ASP.Net MVC - PullRequest
0 голосов
/ 23 января 2019

Я хочу обновить данные, найденные в трех связанных таблицах в базе данных.Я на самом деле отправляю все необходимые данные в базу данных, но не могу их обновить.Я получаю [DbEntityValidationException: проверка не удалась для одного или нескольких объектов.См. Свойство EntityValidationErrors для получения дополнительной информации.] Исключение SQL.

Ниже приведено то, что у меня есть на самом деле

ViewModel ChauffeurVM:

public class ChauffeurVM
{
    public int ChauffeurId { get; set; }

    public virtual PERSONNE Personne { get; set; }
    public virtual PIECEIDENTITE PieceIdentite { get; set; }
    public string NumeroPermis { get; set; }
}

Контроллер:

            public ActionResult ModifierChauffeur(ChauffeurVM ChauffeurVM, HttpPostedFileBase postedPhoto, string Sexe)
    {
        CHAUFFEUR chauffeur = new CHAUFFEUR();

        ChauffeurVM.Personne.Sexe = Sexe;

        using (IDAL dal = new Dal())
        {
            ChauffeurVM.Personne.Photo = dal.UploadandGetImagePath(postedPhoto);
            chauffeur.ChauffeurId = dal.UpdateChauffeur(ChauffeurVM);
            return RedirectToAction("ListeChauffeur");
        }

    }

Метод Dal:

    public int UpdateChauffeur(ChauffeurVM chauffeur)
    {
        CHAUFFEUR c = new CHAUFFEUR();
        try
        {
            c = ChauffeurParId(chauffeur.ChauffeurId);

            c.NumeroPermis = chauffeur.NumeroPermis;

            bdd.Entry(c).State = EntityState.Modified;
            bdd.SaveChanges();
        }
        catch
        {

            throw;
        }
        //Try to assign the value chauffeur.Personne.PersonneId to the pId
        int pId = chauffeur.Personne.PersonneId;


        c.Personne = new PERSONNE();
        PERSONNE p = detailsChauffeurparPersonneId(chauffeur.Personne.PersonneId);
        try
        {
            if (p != null)
            {
                p.Nom = chauffeur.Personne.Nom;
                p.Prenom = chauffeur.Personne.Prenom;
                p.Sexe = chauffeur.Personne.Sexe;
                p.Telephone = chauffeur.Personne.Telephone;
                p.Photo = chauffeur.Personne.Photo;
                p.LieuNaissance = chauffeur.Personne.LieuNaissance;
                p.DateNaissance = chauffeur.Personne.DateNaissance;
                p.CodePostal = chauffeur.Personne.CodePostal;
                p.Adresse = chauffeur.Personne.Adresse;
                p.Email = chauffeur.Personne.Email;
                p.AdresseBoulot = chauffeur.Personne.AdresseBoulot;
                p.AdresseDomicile = chauffeur.Personne.AdresseDomicile;
                p.PersonneId = chauffeur.Personne.PersonneId;

                bdd.Entry(p).State = EntityState.Modified;
                bdd.SaveChanges();
            }
            else
            {

            }

        }
        catch
        {

            throw;
        }

        try
        {
            PIECEIDENTITE pi = detailsPieceIdentiteparPersonneId(chauffeur.Personne.PersonneId);

            pi.NumeroPiece = chauffeur.NumeroPiece;
            pi.LieuDelivrance = chauffeur.LieuDelivrance;
            pi.DateDelivrance = chauffeur.DateDelivrance;
            pi.DateExpiration = chauffeur.DateExpiration;
            pi.Autorite = chauffeur.Autorite;

            bdd.Entry(pi).State = EntityState.Modified;
            bdd.SaveChanges();
        }
        catch
        {

            throw;
        }
        return c.ChauffeurId;
    }

Я ожидаю обновления данных в базе данных.Но я получаю следующее исключение: [DbEntityValidationException: проверка не удалась для одного или нескольких объектов.См. Свойство EntityValidationErrors для получения дополнительной информации.]

Когда я добавляю точки останова, мне удается просмотреть все данные, отправленные из формы.Я не могу понять, какое поле имеет нулевое значение.

Пожалуйста, помогите, пожалуйста!

1 Ответ

0 голосов
/ 23 января 2019

У вас есть исключение DbEntityValidationException, которое должно указывать на участника, вызвавшего эту проблему. Вы должны перехватить исключение DbEntityValidationException следующим образом, чтобы получить сообщения проверки. Посмотрите в списке EntityValidationErrors для получения дополнительной информации.

try
{
}
catch(DbEntityValidationException ex)
{
   var firstErrorMessage = ex.EntityValidationErrors.First().ValidationErrors.First()
                   .ErrorMessage;
}
...