sql >> Base de Datos >  >> RDS >> Sqlserver

¿Alguna forma de acelerar CreateIfNotExists en Entity Framework?

Sí. El objetivo es usar la base de datos real solo para las pruebas de integración que no tienen que ejecutarse con tanta frecuencia y todo el conjunto de pruebas de integración generalmente se ejecuta solo en el servidor de compilación.

Esto se debe a inicialización lenta de EF cuando se prueba la unidad (puede intentar cambiar a x86). El tiempo también es consumido por la generación de vistas. Las vistas se pueden generar previamente que generalmente se hace para reducir el inicio y la inicialización del sistema real, pero en el caso de acelerar las pruebas unitarias, usar la generación previa de vista no ayudará demasiado porque simplemente moverá el tiempo de la prueba a la compilación.

Dar la vuelta solo significaría usar un script SQL simple y antiguo. El tiempo adicional necesario para esta operación se puede gastar en generar ese SQL. Creo que el SQL no se almacena en caché porque la ejecución normal de la aplicación normalmente no lo necesita más de una vez, pero puede pedirle a EF que le proporcione al menos la parte más importante de ese SQL, almacenarlo en caché en algún lugar y ejecutarlo usted mismo cada vez que lo necesite. . EF puede proporcionarle SQL para tablas y restricciones:

var dbSql = ((IObjectContextAdapter) context).ObjectContext.CreateDatabaseScript();

Solo necesita tener su propio SQL pequeño para crear una base de datos y usarlos juntos. Incluso algo como seguir el guión debería ser suficiente:

CREATE DATABASE YourDatabaseName

USE YourDatabaseName

También debe desactivar primero la generación de la base de datos en el código para que esto funcione y tomar el control del proceso:

Database.SetInitializer<YourContextType>(null);

Al ejecutar el SQL de creación de la base de datos, necesitará una cadena de conexión separada que apunte a Master base de datos.