2014-04-17 18 views
5

Sto tentando di creare un elenco a discesa per il nome del reparto. Sto usando MVC5. Ho visto troppa soluzione nello stack overflow ma non ho mai trovato una soluzione valida relativa a MVC5.Un'eccezione di tipo 'System.InvalidOperationException' si è verificata in EntityFramework.dll ma non è stata gestita nel codice utente

Database Name : AppraisalDBContext 
Table Name : Department 
Column Name : deptID (Primarykey) 
       deptName (department name) 
       Description 

sto ottenendo questo errore:

An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code 

Additional information: The model backing the 'AppraisalDBContext' context has changed since the database was created.Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/? 

Codice:

controller classe Nome (DepartmentController.cs):

public ActionResult Index(string depName) 
{ 
    var DeptLst = new List<string>();   
    var GenreQry = from d in db.Department 
        orderby d.deptName 
        select d.deptName; 

    DeptLst.AddRange(GenreQry);    // Here I am confusing 
    ViewBag.depName = new SelectList(DeptLst); // Here I am confusing 
    var depts = from m in db.Department  // Here I am confusing 
       select m; 


    return View(depts); 
} 

classe Nome modello (Dipartimenti. cs):

namespace appraisalProject.Models 
{ 
    [Table("Department")] 
    public class Departments 
    { 
     [Key] 
     public int deptId { get; set; } 
     public string deptName { get; set; } 
     public string Description { get; set; } 
    } 
} 

classe Nome modello (AppraisalDBContext.cs):

namespace appraisalProject.Models 
{ 
    public class AppraisalDBContext:DbContext 
    { 
     public DbSet<Departments> Department { get; set; } 
    } 
} 

Index.cshtml:

@using (Html.BeginForm()) 
{ 
<p> 
    Genre: @Html.DropDownList("depts", "All") 
    <input type="submit" value="Filter" /> 
</p> 
} 

risposta

7

dettagli Il messaggio di errore tutto quello che è necessario sapere:

Ulteriori informazioni: Il modello che supporta il contesto 'AppraisalDBContext' è cambiato da quando è stato creato il database. Considerateci ing Code First Migrations per aggiornare il database (http://go.microsoft.com/fwlink/?

Significa che una delle classi utilizzate nello AppraisalDBContext è stata modificata, ma il database non è stato aggiornato, quindi non è aggiornato. È necessario aggiornare questo utilizzando le migrazioni Code First.

Ecco un bel blogpost che ti guida attraverso il processo.

+0

Grazie lan. Questo link è anche utile per me: http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/migrations-and-deployment-with-the-entity-framework-in-an -Asp-net-MVC-applicazione –

1

risposta di lan mi ha aiutato. Il problema era che avevo aggiornato le classi del modello ma il database aveva ancora la vecchia definizione. Ho pensato che Initializer ClearDatabaseSchemaIfModelChanges <> dovrebbe resettare il database su nuove chiamate, questo è quello che ho letto su msdn. Risulta, l'inizializzatore non viene chiamato. Quindi ho abbandonato il database manualmente:

new MyDbContext().Database.Delete(); 

nel registro WebApiConfig() Methode.

Dopodiché, l'inizializzatore viene richiamato all'avvio successivo e lo schema db viene aggiornato.

Problemi correlati