340 votes

La validation a échoué pour une ou plusieurs entités tout en économisant des modifications à la base de données de SQL Server

Je veux enregistrer mon montage à la Base de données et je suis en utilisant Entity FrameWork Code First dans ASP.NET MVC 3 / C# mais j'obtiens des erreurs. Dans ma classe d'Événements, j'ai DateTime et TimeSpan types de données, mais dans ma base de données, j'ai la Date et l'heure, respectivement. Serait-ce la raison? Comment puis-je convertir à l'appropriées type de données dans le code avant d'enregistrer les modifications apportées à la base de données.

public class Event
{
    public int EventId { get; set; }
    public int CategoryId { get; set; }
    public int PlaceId { get; set; }
    public string Title { get; set; }
    public decimal Price { get; set; }
    public DateTime EventDate { get; set; }
    public TimeSpan StartTime { get; set; }
    public TimeSpan EndTime { get; set; }
    public string Description { get; set; }
    public string EventPlaceUrl { get; set; }
    public Category Category { get; set; }
    public Place Place { get; set; }
}

Méthode dans le contrôleur >>>> Problème à storeDB.SaveChanges();

// POST: /EventManager/Edit/386        
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
    var theEvent = storeDB.Events.Find(id);

    if (TryUpdateModel(theEvent))
    {
        storeDB.SaveChanges();
        return RedirectToAction("Index");
    }
    else
    {
        ViewBag.Categories = storeDB.Categories.OrderBy(g => g.Name).ToList();
        ViewBag.Places = storeDB.Places.OrderBy(a => a.Name).ToList();
        return View(theEvent);
    }
}

avec

public class EventCalendarEntities : DbContext
{
    public DbSet<Event> Events { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Place> Places { get; set; } 
}

SQL Server 2008 R2 Base de données / T-SQL

EventDate (Datatype = date).
StartTime (Datatype = temps)
EndTime (Datatype = temps)

Http Formulaire

EventDate (Datatype = DateTime) ex: 4/8/2011 12:00:00 AM
StartTime (Datatype = plage de Temps/temps pas sûr), par exemple, 08:30:00
EndTime (Datatype = plage de Temps/temps pas sûr), par exemple, 09:00:00

Erreur de serveur dans l'Application'/'.

La Validation a échoué pour une ou plusieurs entités. Voir " EntityValidationErrors la propriété pour plus de détails.

Description: Une exception non gérée s'est produite pendant l'exécution de la demande web actuelle. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et où elle a son origine dans le code.

Détails De L'Exception: System.Les données.De l'entité.La Validation.DbEntityValidationException: la Validation a échoué pour une ou plusieurs entités. Voir " EntityValidationErrors la propriété pour plus de détails.

Source De L'Erreur:

Line 75:             if (TryUpdateModel(theEvent))
Line 76:             {
Line 77:                 storeDB.SaveChanges();
Line 78:                 return RedirectToAction("Index");
Line 79:             }

Fichier Source: C:\sep\MvcEventCalendar\MvcEventCalendar\Controllers\EventManagerController.cs Ligne: 77

Trace De La Pile:

[DbEntityValidationException: la Validation a échoué pour une ou plusieurs entités. Voir " EntityValidationErrors la propriété pour plus de détails].

840voto

Praveen Prasad Points 13137
<pre><code></code><p><code></code><code></code></p></pre>

249voto

GONeale Points 9432

Pendant que vous êtes en mode débogage dans les `` bloquer ouvert vers le haut de la fenêtre Espion « express » ( ctrl + alt + q ) et collez là dedans :

``

ou :

``

Si vous n’êtes pas dans un try/catch ou n’avez pas accès à l’objet exception.

Cela vous permettra de creuser dans le `` tree. C’est la meilleure façon que j’ai trouvé pour obtenir un aperçu instantané de ces erreurs.

37voto

Tony Points 793

Dans le cas, vous avez les classes avec les noms de propriété même, voici une petite extension à la réponse de Praveen :

22voto

Bolt Thunder Points 341

Comme une amélioration à la fois Praveen et Tony, j’utilise une substitution :

5voto

Lilo Points 337

Consultez ce lien :

Moyen simple d’améliorer DbEntityValidationException de Entity Framework

http://blogs.infosupport.com/Improving-dbentityvalidationexception/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X