Cuidado con EF 4.3.X si vienes desde 4.2 o anteriores…

Bueno, el título es bástante explicativo verdad, para todos aquellos que tengais un proyecto en 4.1 o 4.2 y estéis pensando en migrar a la ultima versión del paquete de NuGet tener en cuenta que hay algunas características de los mapeos rotas y por lo tanto el proceso de cambio os puede dar algún que otro quebradero de cabeza. El porque de estas regresiones se debe a la introducción de Migraciones en la version 3 y a la inclusión de este API en el pipeline del proceso de creación del modelo y base de datos.

 

A continuación me gustaría exponeros algun ejemplo de elemento rotos entre 4.2 y las versiones superiores, con Migrations.Si quiere comprobarlo usted mismo puede probar los ejemplos con 4.2 utilizando el siguiente comando de NuGet, Install-Package EntityFramework –Version 4.2

  • TPH – Partiendo del siguiente modelo simple:













En EF 4.2 podíamos hacer:
























Ahora, en EF 4.3.1 si lo intentamos tendremos el siguiente mensaje de excepción:

“Map was called more than once for type ‘Software’ and at least one of the calls didn’t specify the target table name.”

Por supuesto, como en casi todos los casos podemos tener un workaround (algo que por supuesto no tendríamos porqué hacer), que sería mapear esto como sigue:






















  • Relaciones consigo mismo ( hay otros casos.. )

Imaginemos que tenemos la típica tabla de relación consigo mismo, padres e hijos, como por ejemplo la representada por la siguiente entiedad:


























































Este escenario, lo podríamos mapear como sigue:

 






















Sin embargo, si intentamos hacer esto mismo en EF 4.3 tendrímos la siguiente excepción de duplicación de índice ( si, ahora EF hace también el trabajo de creción de índices en la base de datos)

“The operation failed because an index or statistics with name ‘IX_ParentTransactionId’ already exists on table ‘ProcessedTransactions’.”

Bueno, es cierto que esto es un bug que se debe a que puede que el mapeo no sea “correcto del todo” (puesto que estariamos creando 2 asociaciones en vez de 1) pero no es menos cierto que si en 4.2 funcionaba en 4.3 también debería, y, sino es así, DEBERIAN NOTIFICAR QUE CAMBIOS ROMPEN CON LA VERSIÓN ANTERIOR.

 

Conclusiones

Lo que acabamos de poner aquí son solamente algunos de los ejemplos de cosas que pueden levantarnos algún que otro dolor de cabeza si migramos nuestras soluciones a  versiones > 4.3. Por eso, como  reza el titulo del post, ojo si vais a migrar vuestras aplicaciones porque el camino no es como debería, exento de trabajo…

Saludos

Unai