Comment gérer le Système.Les données.De l'entité.La Validation.DbEntityValidationException?
Mon appli obtient l'erreur suivante:
Une exception de type
'Système.Les données.De l'entité.La Validation.DbEntityValidationException " s'est produite
dans EntityFramework.dll mais n'a pas été traitée dans le code utilisateurInformations supplémentaires: la Validation a échoué pour une ou plusieurs entités.
Voir " EntityValidationErrors la propriété pour plus de détails.
Je reçois ce message d'erreur lorsque vous essayez d'enregistrer un nouvel utilisateur. L'erreur se produit sur 'db.SaveChanges()'
Voici le code:
public ActionResult Registration(x.Models.User user)
{
if(ModelState.IsValid)
{
using(var db = new xDBEntities1())
{
var crypto = new SimpleCrypto.PBKDF2();
var encrpPass = crypto.Compute(user.password);
var sysUser = db.users.Create();
sysUser.email = user.email;
sysUser.username = user.username;
sysUser.password = encrpPass;
sysUser.premium_credits = 0;
sysUser.login_times = 0;
sysUser.last_ip = Request.ServerVariables["REMOTE_ADDR"];
sysUser.creation_ip = Request.ServerVariables["REMOTE_ADDR"];
sysUser.banned = 0;
sysUser.creation_date = DateTime.Now;
sysUser.creation_time = DateTime.Now.TimeOfDay;
db.users.Add(sysUser);
db.SaveChanges();
}
}
return RedirectToAction("Index", "Home");
}
edit:
L'utilisateur de la classe du modèle
public class User
{
[Required]
[StringLength(50)]
[Display(Name="Username: ")]
public String username { get; set; }
[Required]
[DataType(DataType.Password)]
[StringLength(50,MinimumLength=6)]
[Display(Name="Password: ")]
public string password { get; set; }
[Required]
[EmailAddress]
[StringLength(50)]
public string email { get; set; }
public int phonenumber { get; set; }
public int mobilephonenumber { get; set; }
}
}
Comment puis-je gérer cela ?
OriginalL'auteur user2545576 | 2014-02-06
Vous devez vous connecter pour publier un commentaire.
Il y a une sorte de base de données de validation qui se passe, vous empêchant d'écrire les données.
La solution est déjà indiqué sur cette page:
La Validation a échoué pour une ou plusieurs entités. Voir " EntityValidationErrors la propriété pour plus de détails
Comme une note de ce que vous êtes en utilisant .net mvc, vous devez utiliser le Système.Diagnostics.Debug.WriteLine() à la place de la Console.Writeline() et cela va écrire dans la fenêtre de sortie de débogage lorsque vous déboguez. Comme vous ne pouvez pas écrire dans la console lors de l'exécution d'un projet mvc.
OriginalL'auteur Sebastian
Pour résoudre cette erreur, nous pouvons conclure que la SaveChanges() la méthode de DatabaseContext objet dans le bloc try et Catch boucle par des erreurs de savoir où est l'erreur. Le code ci-dessous va.
Une fois que l'erreur est trouvée, vous pouvez travailler sur qui à le réparer.
Espérons que cela aide. Grâce
OriginalL'auteur RAVI VAGHELA
Même si il est accepté comme réponse déjà, mon expérience pourrait probablement aider quelqu'un dans le futur. Pour un test rapide, vous pouvez vérifier les données que vous entrez des données dans la base de données de Configuration.cs fichier, puis dans le Modèle, vous pouvez vérifier les conditions de validation. Par exemple, dans mon cas, je mettrais la suite de la validation de la condition dans un modèle:
Et puis, à l'intérieur de la Configuration.cs attribuant le prix:
Ce, créé EntityFrameworkExceptions et empêché de base de données à partir de semis.
OriginalL'auteur
Vous pouvez remplacer le
SaveChanges
, pour gérer cette exception et de fournir de meilleurs détails de l'exception.Vous pouvez créer une classe "suivant" pour votre classe de contexte... le code complet de la classe est comme suit:
Vérifier cela pour plus d'informations: http://devillers.nl/blog/improving-dbentityvalidationexception/
OriginalL'auteur Romias
La Longueur du mot de passe dans la base de données et le Modèle doit être >= la longueur de encrpPass.
OriginalL'auteur Source007
Vérifier la taille du champs de base de données que vous essayez d'enregistrer les données. La modification d'un champ de type varchar(50) varchar(max) a fait le tour pour moi.
Si vous êtes en utilisant Entity Framework, vous pourriez avoir à supprimer et ajouter de la table que vous avez apporté des modifications.
OriginalL'auteur stink