miércoles, 16 de enero de 2013

Errores al generar código en un modelo EDM en VS2012

Cómo reproducir el problema:

En Visual Studio 2012 crear un modelo de entidades de datos (Entity Data Model o EDM) desde una base de datos existente.

Primer problema:

Aparecen errores relativos a conflictos entre nombres de propiedad que se repiten, una por cada campo.
Solución:
Compila la aplicación y desaparecen. (magia pura al estilo datasets)

Continuamos:

Añades un elemento de generación de código, concretamente: EF 5.x dbContextGenerator.

Síntomas:

Aparecen errores que señalan métodos duplicados: New(), OnModelCreating y propiedades....
Por ejemplo:

'Protected Overrides Sub OnModelCreating(modelBuilder As System.Data.Entity.DbModelBuilder)' tiene varias definiciones con firmas idénticas.

Solución:

En el explorador de soluciones activa mostrar todos los archivos. Ves al EDM que has creado,
Veras archivos tt (templates) que a su vez contienen el código generado.
Tienes los que incorpora por defecto
  • (nombre del EDM).tt
  • (nombre del EDM).context.tt
y los que has añadido.
  • (nombre del elemento a generador de código).tt
  • (nombre del elemento a generador de código).context.tt
Bueno ahora viene lo divertido
En Visual Studio 2012 no hace falta usar EF 5.x dbContextGenerator, ya se utiliza por defecto para generar el código.
En  VS2010 no eran estas las plantillas por defecto y veras  por ahí artículos paso a paso en que te dicen que añadas dbContextGenerator.

Así que borra los elementos que has añadido:
  • (nombre del elemento a generador de código).tt
  • (nombre del elemento a generador de código).context.tt
Los errores desparecerán. Y ya sabes no vuelvas a añadir el elemento de generador de código..

Nota: Podría ocurrir que hayas usado otro tipo de elemento de generación de código, En ese caso deberías borrar las originales del proyecto.

Ver: EF Designer Code Generation Templates  en http://msdn.microsoft.com/en-us/data/jj613116.aspx




No hay comentarios: