Kłopotliwa migracja EntityFramework z ASP.NET 5 Beta 8 na OS X

Kilka dni temu wypuszczona została wersja Beta 8 nowego ASP.NET. Projekt zmierza w stronę ukończenia i bawię się już z nim od kilku wydań – póki co z sukcesami 🙂

Niestety, po aktualizacji zarówno pod .NET Core jak i Mono przestały działać migracje bazy danych wywoływane poleceniem:

SIERRA-BRAVO:Foobar.Web michal$ dnx ef database update

Powyższe wywołanie kończyło się następującym komunikatem:

Using context 'ApplicationDbContext'.
Using database 'main' on server '/Users/michal/dev/Foobar.Web/Foobar.Web.db'.
System.EntryPointNotFoundException: sqlite3_close_v2
at (wrapper managed-to-native) Microsoft.Data.Sqlite.Interop.NativeMethods:sqlite3_close_v2 (intptr)
at Microsoft.Data.Sqlite.Interop.Sqlite3Handle.ReleaseHandle () in :line 0
at System.Runtime.InteropServices.SafeHandle.DangerousReleaseInternal (Boolean dispose) in :line 0
at System.Runtime.InteropServices.SafeHandle.DisposeInternal () in :line 0
at System.Runtime.InteropServices.SafeHandle.InternalDispose () in :line 0
at System.Runtime.InteropServices.SafeHandle.Dispose (Boolean disposing) in :line 0
at System.Runtime.InteropServices.SafeHandle.Dispose () in :line 0
at Microsoft.Data.Sqlite.SqliteConnection.Close () in :line 0
at Microsoft.Data.Entity.Storage.RelationalConnection.Close () in :line 0
at Microsoft.Data.Entity.Storage.SqlStatementExecutor.Execute[T] (IRelationalConnection connection, Microsoft.Data.Entity.Storage.RelationalCommand command, System.Func`2 action) in :line 0
at Microsoft.Data.Entity.Storage.SqlStatementExecutor.ExecuteScalar (IRelationalConnection connection, System.String sql) in :line 0
at Microsoft.Data.Entity.Migrations.HistoryRepository.Exists () in :line 0
at Microsoft.Data.Entity.Migrations.Internal.Migrator.Migrate (System.String targetMigration) in :line 0
at Microsoft.Data.Entity.Design.MigrationsOperations.UpdateDatabase (System.String targetMigration, System.String contextType) in :line 0
at Microsoft.Data.Entity.Commands.Program.UpdateDatabase (System.String migration, System.String context) in :line 0
at Microsoft.Data.Entity.Commands.Program+<>c__DisplayClass7_2.b__5 () in :line 0
at Microsoft.Dnx.Runtime.Common.CommandLine.CommandLineUtilsExtensions+<>c__DisplayClass0_0.b__0 () in :line 0
at Microsoft.Dnx.Runtime.Common.CommandLine.CommandLineApplication.Execute (System.String[] args) in :line 0
at Microsoft.Data.Entity.Commands.Program.Main (System.String[] args) in :line 0
sqlite3_close_v2

Intensywne googlowanie naprowadziło mnie podstawową przyczynę: Niektóre maszyny mogą mieć starą wersję sqlite’a, dopiero po wersji 3.7 działa wywołanie sqlite3_close_v2. Co dziwne, u mnie zarówno na OS X 10.9 Mavericks jak i na posiadającej sqlite 3.9 wersji 10.11 El Capitan nie działało to, więc pewnie problem nie tylko w tym leżał, ale (prawdopodobnie) również w sposobie budowania sqlite’a wbudowanego w OS X. Dokonałem zatem szybkiej podmiany za pomocą Homebrew:

SIERRA-BRAVO:Foobar.Web michal$ brew reinstall sqlite3
SIERRA-BRAVO:Foobar.Web michal$ brew link sqlite3

I już! Naprawione! 🙂

Teraz można już migrować:

Działająca migracja
Działająca migracja

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *