Hola grupo, un saludo a todos.
Comienzo diciendo que posiblemente sean tonterías que no he podido solucionar, pero por tal motivo siguen siendo una piedra en mi camino. Así que perdonen mi ignorancia.
La historia corta es que estoy en una empresa que decidió migrar toda la %%&$··%&& que tienen a nuevas versiones de .net incluido la capa de acceso a datos con Entity. En principio usamos EF 5, pero he sugerido migrar a 6 directamente por temas de compatibilidad con cosas que a futuro necesitaremos. Y si no pos me da igual, por estar en el chisme de lo último + -.
Lo que hay:
Visual Studio 2015(c#) + EF6 + Oracle 12C ó Sql ó MySql (por el momento solo se dará el caso entre Oracle y Sql, siendo Oracle del que se va a partir)
Yo nunca he trabajado antes con Entity con responsabilidad de hacer trabajos de arquitectura ni mucho menos y ahora me han pedido que me encargue de esto y mi primer choque es que si es multi DB, por que si cambias una cadena de conexión por otra, no todo funciona?, en principio si con Sql pero no con Oracle (Y ojo, esto es cierto pues he probado y no me funciona, otra cosa es que mi manera de importar el modelo no este siendo la correcta o que se yo. Seguro que los errore son míos, pero por el momento el culpable es Entity hasta que no se pruebe lo contrario)
Ahhh, claro, Database First, porque esto es un arrastre de un sistema super viejo. Entonces nada, tengo que lograr que sin afectar a los viejos de la empresa que están en total desacuerdo con el cambio se monten en este tren.
Después de la muela:
Cree un modelo desde cero, cuando cambie de base de datos en Oracle 12C me construye las consultas con el Schema anterior porque esta generado así el fichero .esmx y lo puedo editar como xml y quitárselo o cambiarlo, pero no es lo que necesito. También hay quien tiene métodos implementados que lo cambian automáticamente, pero no quisiera tocar lo que es generado por EF a menos que no me quede de otra.
Sobrecargo el constructor del contexto pero nada, no soluciono con solo cambiar la cadena de conexión en runtime.
Vi que hay una manera de decirle que el modelo tiene como Schema por defecto "X" que creo que es a partir de la versión 6 de EF pero esto no me funciona, básicamente por ser database first o eso creo yo.
Esto es sin contar que si cambias a un modelo de otro motor de DB (sql) pos peor por todo lo que genera esto.
Por motivox XYZ, la estructura de las bases de datos "debe" ser la misma, pero los nombres de las tablas están en minúsculas en una DB y en mayúsculas en otra aun cuando se llamen iguales todos sus tablas y campos de las mismas, con lo que al importarlas en los proyectos diferentes ya generan nombres con mayúsculas o minúsculas y esto en la capa que usa este proyecto ya no funcionará. Igual, soluciones como Notations etc son paliativos, buenos para un par de tablas pero para unas miles que tiene este mostrico heredado es muy complejo. hay algunas sugerencias de hacer en runtime una conversión de los nombres, pero lo dicho, no lo veo, no me ha llevado a buen camino.
No he probado alguna lib de 3ero que sugieren algunos, con lo cual no puedo hablar de este tema.
Hice algún ejemplo con IOC y DI pero esto me ha parecido inventar una rueda partiendo de otra. Además de que no solucionaba todo y añadía más complejidad que no me han permitido abordar en esta etapa. Ahhh porque aunque "decida" un poco con arquitectura o posibles decisiones sigo siendo un peón y un mandao. Nada de jefe, ni en casa.
Soluciones temporales hasta que algún volao o "EL Volaito!!" me sugieran algo:
- Se hizo un proyecto con cada base de datos (motores diferentes y schemas diferentes, misma estructura ya que son para el mismo software, menos la de sql que tiene el tema de las mayúsculas y minúsculas). Esta DB(su project) será enchufada en un cliente que lo necesite y se publicara solo para el, con lo cual ya nada es en runtime. No es que no funcione pero eso de cambiar mágicamente no va.
- Si se cambia de DB en tiempo de debug para probar en otro server de test etc, terminamos editando el xml y su Schema para que funcione con el otro Schema, y si se toca la DB o lo que sea se regenera todo eso y perdemos lo que no saquemos en clases partial aparte.
Por el momento esto soluciona algo, pero cuando tenga la empresa que lidiar con los diferentes clientes que tiene y tendrá nos vamos a hacer un lío de poner y quitar proyectos, porque tenerlo todos en un proyecto tampoco se quiere, son muchas tablas y muy grandes. También hay que llamarlas del mismo modo para que lo que esta encima no se complique con nombres diferentes. etc.
Esto amigos, esto es lo que pasa cuando le dan la batuta a uno que no tiene puta idea. Aunque me estoy pensando vender pizza caliente.....
Un abrazo y a la espera de consejos.... del profesor espinosa o de los volaos.