Estoy trabajando en un proyecto que puede terminar con múltiples versiones/variantes de UI, pero hasta ahora tengo dos subproyectos en mi solución Web que contiene una interfaz web con ASP.NET MVC . Proyecto de servicio es el lugar donde tengo definido el contexto y los modelos de mi base de datos.Lugar para poner Database.SetInitializer
Mi objetivo es tener un mínimo o posiblemente ninguna referencia al código específico de EF en mi proyecto web. Quiero que sea independiente, así que cuando cambio los dlls con backend de servicio (desde digamos SQL a XML o MySQL) no debería hacer modificaciones múltiples en mi proyecto MVC.
Esto es como se ve:
Mis preguntas son: - hasta ahora he encontrado ningún ejemplo de la utilización de Database.SetInitializer en otro lugar que Global.asax. Me gustaría volver a crear la base de datos si el modelo ha cambiado en mi clase de DatabaseContextProvider, similar a la de fábrica, o en la clase de servicio que extrae datos del contexto y los proporciona a la IU con DTO. ¿Hay algún inconveniente de esa ubicación? - Me gustaría que el connectionString del contexto fuera configurable con el archivo Properties/Settings.settings. ¿Es razonable?
Un posible problema al hacer esto es que podría llamarse cada vez que se construye la clase myDbContext, lo que podría ser muy bien cada vez que utilice la base de datos. Me imagino que esta es una operación razonablemente costosa y no quieres que esto suceda. Usar Global.asax Application_Start o un constructor estático en la clase DataContext garantiza que el código solo se invoque una vez, cuando se inicia la aplicación. – Holf
Estoy de acuerdo con Holf, el código debería estar en la application_start –