Nie mogę ustalić, dlaczego moja ostatnia migracja nie jest wykonywana automatycznie po uruchomieniu aplikacji (lub przynajmniej przy pierwszym dostępie do kontekstu bazy danych). Kiedyś w trakcie programowania wykonywałem ręcznie aktualizację bazy danych, ale chcę sprawdzić, czy uaktualni się automatycznie w moim hostowanym środowisku testowym.MigrateDatabaseToLatestVersion nie wykonano
W Application_Start():
Database.SetInitializer<FepazoContext>(
new MigrateDatabaseToLatestVersion<FepazoContext, FepazoConfiguration>())
W FepazoConfiguration:
internal sealed class FepazoConfiguration :
DbMigrationsConfiguration<Fepazo.Models.FepazoContext>
{
public FepazoConfiguration()
{
AutomaticMigrationsEnabled = true;
}
}
nawet dodaje to do konstruktora FepazoContext:
public FepazoContext() : base("DefaultConnection")
{
Database.Initialize(false);
}
Niektóre dodatkowa informacja:
- Migracja został automatycznie utworzony przez dodatek migracji i wygląda ok.
- Kiedy wysyłam zapytanie do tabeli
__MigrationHistory
, widzę, że migracja nie została jeszcze "zarejestrowana" jako wykonana. - Sprawdziłem, że ustawienie inicjatora lub
AutomaticMigrationsEnabled
nie jest przesłonięte w pliku Web.config. - Punkty przerwania w
FepazoContext
konstruktorze iFepazoConfiguration
są otrzymywane trafienie.
Czy coś zapomniałem? Czy mogę głębiej zagłębić się, aby dowiedzieć się, gdzie jest źle?
Aktualizacje
Uboczny True
do Database.Initialize
spróbować wymusić migracja ma też żadnego efektu. Database.CompatibleWithModel(true)
zwraca wartość false - system wykrywa różnicę, ale nie wykonuje oczekującej migracji!
public FepazoContext() : base("DefaultConnection")
{
if (!Database.CompatibleWithModel(true))
{
// This is executed (each time the code enters)
Database.Initialize(true);
}
}
Obejście
Jako obejście, wzywam DbMigrator.Update()
wyraźnie tuż po ustawieniu inicjatora. Że załatwia sprawę, choć wciąż chciałbym wiedzieć, dlaczego to nie działa automatycznie ...
protected void Application_Start()
{
// <...>
Database.SetInitializer<FepazoContext>(
new MigrateDatabaseToLatestVersion<FepazoContext, FepazoConfiguration>());
var dbMigrator = new DbMigrator(new FepazoConfiguration());
dbMigrator.Update();
// <...>
}
Dzięki za odpowiedź. To nie wyjaśnia, dlaczego system nie wykrywa, że musi zaktualizować bazę danych przy użyciu najnowszej migracji. Próbowałem przekazać 'true' jako parametr do' Database.Initialize() ', aby wymusić aktualizację, ale nawet to nie wykonuje. –