我的身份验证控制器中的System.Data.Entity.Core.EntityCommandExecutionException

时间:2015-10-09 14:43:31

标签: c# entity-framework

使用c#和实体框架的新功能。 我的控制器LogIn在访问dbcontext时不起作用,以比较在表单中输入的登录用户。

问题在于控制器上的这一行:

var personne = db.Personnes.FirstOrDefault(p => p.LoginPersonne == login);

这是班级:

[Table("PERSONNE")]
public class Personne
{
    // Propriétés de la classe User
    [Key]
    [Column("ID_PERSONNE")]
    //[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int IdPersonne { get; set; }
    //[Required]
    [Column("NOM_PERSONNE")]
    public string NomPersonne { get; set; }
    [Column("PRENOM_PERSONNE")]
    public string PrenomPersonne { get; set; }
    [Column("LOGIN_PERSONNE")]
    [Display(Name = "Nom d’utilisateur: ")]
    public string LoginPersonne { get; set; }
    #region Properties link
    // Lien Many to Many avec Evenement (Une personne peut s'inscrire à plusieurs Evenements)
    [Column("ID_EVENEMENT")]
    [ForeignKey("IdEvenement")]
    public virtual ICollection<Evenement> Evenements { get; set; }
    // Lien One to Many avec Statut (Une personne a 1 et 1 seul statut)
    [Column("ID_STATUT_PERSONNE")]
    public int IdStatutPersonne { get; set; }
    [ForeignKey("IdStatutPersonne")]
    public virtual StatutPersonne statutsPersonne { get; set; }
}

控制器:

 [HttpPost]
    public ActionResult LogIn(Models.Personne personne)
    {
        // On regarde si le modèle est valide
        if (ModelState.IsValid)
        {
            if(IsValid(personne.LoginPersonne))
            {
                FormsAuthentication.SetAuthCookie(personne.LoginPersonne, false);
                    return RedirectToAction("Index", "Login");
            }
            else
            {
                ModelState.AddModelError("", "Login n'existe pas");
            }
        }
        return View(personne);
    }

    // Méthode pour vérifier si le login est dans la base
    private bool IsValid(string login)
    {
        bool isValid = false;

        using (var db = new AgendaContext())
        {
            var personne = db.Personnes.FirstOrDefault(p => p.LoginPersonne == login);

            if (personne != null)
            {
                if (personne.LoginPersonne == login)
                {
                    isValid = true;
                }
            }
        }
        return isValid;
    }

非常感谢! (对不起我的英文)

1 个答案:

答案 0 :(得分:0)

忘记了dbcontext:

    public AgendaContext() : base("OracleDbContext")
    {
    }
    #endregion
    #region Properties
    public DbSet<Personne> Personnes { get; set; }
    public DbSet<StatutPersonne> StatutsPersonne { get; set; }
    public DbSet<Evenement> Evenements { get; set; }
    public DbSet<Lieu> Lieux { get; set; }
    public DbSet<CategorieEvenement> CategoriesEvenement { get; set; }
    #endregion
    #region Methods
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("AGENDACTCS");
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<Personne>().
            HasMany(t => t.Evenements).
            WithMany(t => t.Personnes).
            Map(
            m =>
            {
                m.MapLeftKey("ID_PERSONNE");
                m.MapRightKey("ID_EVENEMENT");
                m.ToTable("RESERVATION");
            });
        base.OnModelCreating(modelBuilder);  
    }