10

He estado probando EF 4.1 (código primero) con MVC 3. Estoy pensando en cuándo la aplicación necesitará cambios. Probé un par de escenarios. Me gusta la idea de editar manualmente la base de datos cuando cambie el modelo (mis POCO).Edición manual de la base de datos en el primer marco de entidad de código

error

ASP.NET cuando cambio el modelo:

"El modelo de copias del contexto 'CTCMContext' ha cambiado desde que se creó la base de datos Cualquiera de eliminar/actualizar la base de datos manualmente ...."

Ahora, dice que puedo "actualizar manualmente la base de datos", pero lo hice y aún obtener el mismo error. Me estoy perdiendo de algo !!?!

EDITAR

tiene esto que ver con el modelo de hash generar por EF?

Respuesta

8

He tenido algunos problemas con esto también. Descubrí que cuando deja que EF cree su base de datos para usted, se crea una tabla llamada dbo.EdmMetadata y aquí es donde/cómo EF sigue el estado del modelo. Descubrí que si elimina esta tabla después de que la base de datos se haya creado inicialmente, colocará las cosas en "modo manual", donde ahora puede agregar/quitar manualmente columnas, tablas, etc. de su base de datos y EF no lanzará el error que usted están viendo.

Sin embargo, si desea seguir teniendo actualizar EF su base de datos a medida que realiza cambios en su modelo, tendrá que crear y llamar a una clase ContextInitializer que hereda de ambos DropCreateDatabaseIfModelChanges o DropCreateDatabaseAlways dependiendo del comportamiento que desea que suceda .

+0

Gracias por el hack.Para la segunda parte de su respuesta, podría estar interesado en esto: http://stackoverflow.com/questions/4031431/entity-framework-ctp-4-code-first-custom-database-initializer Actualmente estoy leyendo Es probable que lo intente. – billy

0

Como puedo ver, no hay realmente ningún método EF incorporado para la evolución de datos de código primero.

Para lo que fue de mi pregunta inicial, la respuesta está en eliminar la generación/validación de esquema. Es solo entonces que la edición manual del código y la base de datos pueden funcionar.

ACTUALIZACIÓN: EF 5.0 Ahora Soporte migrations

0

cambio de la clase con los nuevos nombres de campos, eliminar la tabla "EdmMetaData" vuelva a compilar la aplicación.

Usted será responsable de modificar el nombre de campo en sus vistas.

me funciona.

+1

Creo que podría hacer eso, pero tendría que modificar el DB y la tabla MetaData ... mi respuesta solo implica modificar el DB (después de eliminar la tabla de metadatos) ... – billy

0

Sé que esto se ha marcado como resuelto, pero en mi caso no funcionó.

Una vez que he eliminado dbo.EdmMetadata que estaba recibiendo un error diferente:

Model compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions.

La forma en que trabajó para mí era eliminar la clase Initializer de Application_Start:

void Application_Start(object sender, EventArgs e) 
{ 
    // MyDB.SetInitializer<MyContext>(new MyInitializer()); 
} 
Cuestiones relacionadas