API-k létrehozása és elvetése
A EnsureCreatedAsync és EnsureDeletedAsync metódusok könnyű alternatívát nyújtanak a Migrations-hoz az adatbázisséma kezeléséhez. Ezek a módszerek olyan helyzetekben hasznosak, amikor az adatok átmenetiek, és a séma módosításakor elvethetők. Például prototípus-készítés, tesztek vagy helyi gyorsítótárak esetében.
Egyes szolgáltatók (különösen a nem relációs szolgáltatók) nem támogatják a migrálást. Ezeknél a szolgáltatóknál gyakran EnsureCreatedAsync
az adatbázisséma inicializálásának legegyszerűbb módja.
Figyelmeztetés
EnsureCreatedAsync
és migrációk nem jól működnek együtt. Ha a Migrations funkciót használja, ne használja EnsureCreatedAsync
a séma inicializálásához.
A EnsureCreatedAsync
-ról a migrációkra való áttérés nem zökkenőmentes. Ennek legegyszerűbb módja az adatbázis elvetése és újbóli létrehozása a Migrálások használatával. Ha a jövőben számít arra, hogy migrációkat fog használni, a legjobb, ha rögtön a Migrációkkal kezd, ahelyett hogy a EnsureCreatedAsync
-t használná.
EnsureDeletedAsync
A EnsureDeletedAsync
metódus elveti az adatbázist, ha létezik. Ha nem rendelkezik a megfelelő engedélyekkel, a rendszer kivételt jelez.
// Drop the database if it exists
await dbContext.Database.EnsureDeletedAsync();
EnsureCreatedAsync
EnsureCreatedAsync
létrehozza az adatbázist, ha nem létezik, és inicializálja az adatbázissémát. Ha vannak táblák (beleértve egy másik DbContext
osztály tábláját is), a séma nem lesz inicializálva.
// Create the database if it doesn't exist
dbContext.Database.EnsureCreatedAsync();
Borravaló
Ezen metódusok aszinkron verziói is elérhetők.
SQL-szkript
A EnsureCreatedAsync
által használt SQL lekéréséhez használhatja a GenerateCreateScript metódust.
var sql = dbContext.Database.GenerateCreateScript();
Több DbContext osztály
EnsureCreated csak akkor működik, ha nincsenek táblák az adatbázisban. Szükség esetén saját ellenőrzést írhat, hogy ellenőrizze, hogy a sémát inicializálni kell-e, és a mögöttes IRelationalDatabaseCreator szolgáltatással inicializálhatja a sémát.
// TODO: Check whether the schema needs to be initialized
// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();