Hay ciertas situaciones en las que las convenciones de EF para nuestros mapeos de entidades no nos sirven o bien no nos sirven completamente, un ejemplo de esto es cuando trabajamos con una base de datos existente, dónde, seguramente, la convención del nombre de las tablas ( pluralización en inglés de los nombres de las entidades ) no nos sirva, y así con otras muchas convenciones. En estas situaciones, es más que seguro que tengamos que hacer uso de las configuraciones personalizadas, instancias de EntityTypeConfiguration<> y ComplexTypeConfiguration<>. En estos casos, cuando el modelo es grande, el aspecto que tendrá nuestro OnModelCreating será un poco esperpéntico, algo similar a lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configuration.Add(<span class="kwrd">new</span> Entiti1Configuration()); modelBuilder.Configuration.Add(<span class="kwrd">new</span> Entiti2Configuration()); modelBuilder.Configuration.Add(<span class="kwrd">new</span> Entiti3Configuration()); modelBuilder.Configuration.Add(<span class="kwrd">new</span> Entiti4Configuration()); ... ... ... modelBuilder.Configuration.Add(<span class="kwrd">new</span> Entiti20Configuration()); modelBuilder.Configuration.Add(<span class="kwrd">new</span> Entiti21Configuration()); modelBuilder.Configuration.Add(<span class="kwrd">new</span> Entiti22Configuration()); modelBuilder.Configuration.Add(<span class="kwrd">new</span> Entiti23Configuration()); } |
El problema de este tipo de códigos, amén del matenimiento, es la poca legibilidad del mismo, donde por ejemplo, nos costaría encontrar si una entidad está o no mapeada. Solventar este problema y hacer un código más legible y facilitar la vida al desarrollador no es difícil, ya que en realidad lo único que estamos haciendo ahí es configurar todas las clases de un determinado tipo, algo por lo tanto muy fácil de automatizar. En el siguiente repositorio de GitHub he implementado una posible solución para estos problemas, que nos permite cambiar este código anterior por algo como lo siguiente:
1 2 3 4 |
<span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(ConfigurationSolver.FromThisAssembly()); } |
o, si tenemos los mapas de configuración en otro ensamblado, podríamos hacer:
1 2 3 4 |
<span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(ConfigurationSolver.FromNamedAssembly(<span class="str">"The_Assembly_With_Configs"</span>)); } |
Espero que os guste y, sobre todo, que os sea de utilidad…
1 |
  |
1 |
Saludos |
1 |
Unai |
La verdad es que no hace muchos días que publiqué un post con este trabajo para todos aquellos, que como