Ho cercato questo strano errore per ore ma non ho trovato nulla. Ho una semplice entità:Codice Entity Framework prima: aggiornamento SetInitializer genera l'eccezione
public class Company {
public Guid Id { get; set; }
public string Name { get; set; }
}
E qui è il contesto:
public class MyDBContext : DbContext {
public DbSet<Company> Companies { get; set; }
}
Quando si esegue per la prima volta, tutto funziona bene. Tuttavia, quando cambio l'entità (ad esempio, inserisco l'attributo [Key] per Id), ottengo il "modello è stato modificato" o qualcosa di simile. Quindi, inserisco questo nel Global.asax application_start:
Database.SetInitializer<MyDBContext>
(new DropCreateDatabaseIfModelChanges<MyDBContext>());
Questo è dove mi blocco. Non c'è errore di compilazione, si compila senza errori/avvertimenti. Tuttavia, quando eseguo il mio progetto, viene visualizzato il seguente errore:
Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Si prega di rivedere la traccia dello stack per ulteriori informazioni sull'errore e sulla sua origine nel codice.
Dettagli eccezione: System.TypeLoadException: GenericArguments[0], 'MyDB.Data.MyDBContext', on 'System.Data.Entity.IDatabaseInitializer1[TContext]' violates the constraint of type parameter 'TContext'
.
Per favore, qualcuno ne ha la minima idea? Sto usando Entity Framework 4.1 (CTP5)
Ho finalmente un suggerimento. Il contesto del mio database era in un progetto di libreria di classi, mentre il Global.asax era ovviamente in un'applicazione web MVC3. Lo spostamento dell'intera logica del database sulla stessa applicazione Web MVC3 ha risolto il problema. Quindi, perché non funziona nella libreria di classi? – user825887
F * ck questo, risolto dopo ore. È stato scoperto che la classe della libreria utilizzava la 4.0.0 e l'applicazione web 4.0.1. Colpiscimi. – user825887
Signore, mi hai appena salvato ore di sbattere la testa contro una scrivania. Metti la tua risposta e la invierò immediatamente. – Andrey