2011-05-10 17 views
7

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)

+0

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

+3

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

+3

Signore, mi hai appena salvato ore di sbattere la testa contro una scrivania. Metti la tua risposta e la invierò immediatamente. – Andrey

risposta

2

Per i navigatori di domande senza risposta, questo è stato risposto sopra. Ma mai segnato dagli utenti. Vedi i commenti sopra. Oltre 1K di visualizzazioni! Quello è sprecare un sacco di tempo ... Così ho aggiunto questo.

0

Se si sta lavorando con web.config (invece di Global.asax) e più file di progetto (io per esempio di solito creare in ASP.NET MVC un [projectname] .WebUI che contiene i file MVC e un [ Nomeprogetto] .Domain che è una libreria di classi che contiene la logica dei dati), allora è necessario aggiungere seguente codice ALL web.config/app.config nella soluzione:

<configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
</configSections> 

Questo ha funzionato per me senza bisogno di unire il mio progetto di dominio con il progetto WebUI.

Problemi correlati