5

En la compilación, quiero crear automáticamente una secuencia de comandos sql para generar una nueva base de datos. Planeo usar este script para poder crear una base de datos maestra que pueda comparar con la base de datos de producción, para generar un script de migración. No puedo usar mi base de datos de desarrollo, porque la tengo configurada para usar SqlCE durante el desarrollo.¿Es posible generar un script db sql con Ef4 CodeFirst en build?

Desafortunadamente, parece que no puedo encontrar nada en la API CodeFirst para generar un script sql. Estoy seguro de que es posible, porque primero lo hace el modelo. Veo las llamadas API en mi DbContext para inicializar una base de datos, pero nada que me dé la secuencia de comandos para inicializarlo yo mismo.

También quiero tener este script generado en la compilación. ¿Cuál es la mejor manera de que eso ocurra? Estaba pensando en crear una plantilla T4 y usar Chirpy para ejecutarla en la compilación, pero me pregunto si existe una solución más simple.

Respuesta

2

No, no existe tal posibilidad en este momento. En mi opinión, puede ser posible creando un inicializador personalizado. El inicializador creará la base de datos y usará los objetos de administración de SQL Server para crear scripts desde la base de datos. Pero solo creará scripts basados ​​en el servidor de base de datos actual, de modo que en el caso de SqlCE obtendrá scripts para SqlCE (existen diferencias en los tipos de SQL utilizados).

El enfoque correcto en su escenario es instalar la edición de SQL Server Express y usar las características estándar para inicializar su base de datos y esa instancia. A continuación, podrá usar create script desde la base de datos o usar las herramientas de base de datos de Visual Studio 2010 para crear diff. guiones contra su producción.

+0

Eso es lo que me temía. Supongo que la mejor ruta es crear una prueba de unidad "Puede crear una base de datos Express Express", y de esa manera cada vez que ejecute pruebas unitarias, recreará la base de datos en el Sql Express de la máquina local. Gracias :) – KallDrexx

2

Para cualquiera que todavía esté buscando;

una opción es que puede obtener DDL generado como una cadena y guardarlo en un archivo;

string sqlscript = (context as IObjectContextAdapter).ObjectContext.CreateDatabaseScript(); 
Cuestiones relacionadas