J'utilise un dbContextwhich est décrit comme suitdbcontext n'épargnent ni attraper exeption
public class DbContext: System.Data.Entity.DbContext
{
public DbSet<UserAccount> UserAccounts { get; set; }
public DbSet<Sesison> Sessions { get; set; }
}
Et dans mon action de connexion pour une raison quelconque après avoir vérifié la base de données que l'utilisateur est correcte je ne suis pas en mesure d'utiliser une autre entité du contexte à enregistrer dans la base de données, ce qui se passe est que je ne vais pas obtenir les données enregistrées dans la base de données et il arrêtera effectivement d'exécuter le code après le dc.SaveChanges() mais je ne reçois pas une exception sur mon catch, donc ce que mon navigateur expiriencing est une erreur interne de 500 serveurs.
public ActionResult Login(LoginViewModel model)
{
using (DbContext dc = new DbContext())
{
var v = dc.UserAccounts.SingleOrDefault(a => a.UserName == model.UserName);
if (v != null)
{
if (GetSHA1(model.Password) == v.Password)
{
Guid sessionGuid =Guid.NewGuid();
var session = dc.Sessions.Add(new Sesison() { SessionID = sessionGuid,StartDateTime=DateTime.UtcNow,UserID = v.UserID,ExpireDateTime=DateTime.UtcNow.AddHours(4)});
System.Web.HttpContext.Current.Session["IsLogin"] = true;
System.Web.HttpContext.Current.Session["Session"] = sessionGuid;
try
{
dc.SaveChanges();
}
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}",
validationErrors.Entry.Entity.ToString(),
validationError.ErrorMessage);
// raise a new exception nesting
// the current instance as InnerException
raise = new InvalidOperationException(message, raise);
}
}
throw raise;
}
return Json(new
{
Item1 = "true"
});
}
else
{
return Json(new
{
Item1 = "false",
Item2 = "The username or password you entered is incorrect. Please try again."
});
}
}
else
{
return Json(new
{
Item1 ="false",
Item2 = "The username or password you entered is incorrect. Please try again."
});
}
}
return null;
}
Qu'est-ce que les 500 montrent d'erreur interne du serveur, car si c'est ce qui se passe, je dirais que ce n'est pas un 'System.Data.Entity.Validation.DbEntityValidationException' d'être jeté lorsque vous essayez et d'enregistrer. –
Je ne sais pas, puisque je l'ai juste sur consle depuis son run de jquery –
semble que vous avez raison, j'ai fait quelques modifications à la jquery pour sortir l'erorr L'instruction INSERT était en conflit avec la contrainte FOREIGN KEY "FK_Session_Users". Le conflit s'est produit dans la base de données "FuelSensorDev", la table "dbo.Users", la colonne "id". La déclaration a été terminée. –