Ja. Poängen är att använda den riktiga databasen endast för integrationstester som inte behöver köras så ofta och hela uppsättningen av integrationstester körs vanligtvis bara på byggservern.
Detta beror på långsam initialisering av EF vid enhetstestning (du kan försöka byta till x86). Tiden förbrukas också av visningsgenerering. Visningar kan förgenereras vilket vanligtvis görs för att minska uppstart och initialisering av det verkliga systemet, men i händelse av att enhetstester med vyförgenerering kommer att påskyndas kommer det inte att hjälpa för mycket eftersom du bara kommer att flytta tiden från test till byggnad.
Att gå runt skulle bara betyda att man använder vanligt gammalt SQL-skript. Den extra tid som behövs för den här operationen kan spenderas på att generera den SQL. Jag tror att SQL inte är cachad eftersom normal applikationsexekvering normalt inte behöver den mer än en gång, men du kan be EF att ge dig så att inte den viktigaste delen av SQL, cache den någonstans och kör den själv varje gång du behöver den . EF kan ge dig SQL för tabeller och begränsningar:
var dbSql = ((IObjectContextAdapter) context).ObjectContext.CreateDatabaseScript();
Du behöver bara ha din egen lilla SQL för att skapa databas och använda dem tillsammans. Till och med något som följande skript borde räcka:
CREATE DATABASE YourDatabaseName
USE YourDatabaseName
Du måste också stänga av databasgenerering i kod först för att få detta att fungera och för att ta kontroll över processen:
Database.SetInitializer<YourContextType>(null);
När du kör SQL för att skapa databaser behöver du en separat anslutningssträng som pekar på Master
databas.