2011-05-10 20 views
7

He estado buscando este extraño error durante horas pero no he encontrado nada. Tengo una entidad muy simple:Código de Entity Framework primero: actualización SetInitializer arroja la excepción

public class Company { 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
} 

Y aquí es el contexto:

public class MyDBContext : DbContext { 

    public DbSet<Company> Companies { get; set; } 

} 

Cuando se ejecuta por primera vez, todo funciona muy bien. Pero cuando cambio la entidad (por ejemplo, puse el atributo [Key] para Id), obtengo el "modelo cambiado" esperado o algo así. Por lo tanto, que entro en esto en el Application_Start Global.asax:

Database.SetInitializer<MyDBContext> 
(new DropCreateDatabaseIfModelChanges<MyDBContext>()); 

Aquí es donde se queda bloqueado. No hay error de compilación, se compila sin errores/advertencias. Pero, cuando corro mi proyecto, me sale el siguiente error:

Descripción: Excepción no controlada durante la ejecución de la solicitud Web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Detalles de la excepción: System.TypeLoadException: GenericArguments[0], 'MyDB.Data.MyDBContext', on 'System.Data.Entity.IDatabaseInitializer1[TContext]' violates the constraint of type parameter 'TContext'.

¿Alguien tiene alguna pista? Estoy usando Entity Framework 4.1 (CTP5)

+0

Finalmente recibí una pista. Mi contexto de base de datos estaba en un proyecto de biblioteca de clases, mientras que Global.asax estaba, por supuesto, en una aplicación web MVC3. Mover toda la lógica de la base de datos a la misma aplicación web MVC3 resolvió el problema. Entonces, ¿por qué no funciona en la biblioteca de la clase? – user825887

+3

F * ck esto, resuelto después de horas. Resultó que la clase de la biblioteca estaba usando 4.0.0 y la aplicación web 4.0.1. Dispararme. – user825887

+3

Señor, acaba de ahorrarme horas garantizadas de golpear mi cabeza contra un escritorio. Responde tu respuesta y la votaré de inmediato. – Andrey

Respuesta

2

Para los arrastreros pregunta sin respuesta, esto ha sido contestada anteriormente. Pero nunca marcado por los usuarios. Ver comentarios arriba. ¡Más de 1K vistas! Eso está perdiendo mucho tiempo ... Así que agregué esto.

0

Si está trabajando con Web.config (en lugar de Global.asax) y múltiples archivos de proyecto (que, por ejemplo, en general crear un ASP.NET MVC [projectName] .WebUI que contiene los archivos de MVC y un [ Nombre de proyecto] .dominio que es una biblioteca de clases que contiene la lógica de datos), entonces es necesario agregar siguiente código a todos los Web.config/App.config en su solución:

<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> 

Esto funcionó para mí, sin necesidad de fusionar mi proyecto de Dominio con el proyecto WebUI.

Cuestiones relacionadas