Sto utilizzando Entity Framework Core - Code First per caricare i dati da un file SQLite. Il problema è che ho aggiornato lo schema dei nuovi file SQLite DB e aggiunto campi in una tabella. Funziona bene per il DB appena generato. ma, quando provo ad aprire un vecchio file, ho ottenuto un'eccezione. Non capisco davvero EF. Ho bisogno di aiuto perché ho 2 domande:
Grazie in anticipo.
Eccezione ho ottenuto:
Come puoi vedere, il campo COMMENT non esiste nella tabella GAP.
SQLite Error 1: 'no such column: g.COMMENT'.
à Microsoft.Data.Sqlite.Interop.MarshalEx.ThrowExceptionForRC(Int32 rc, Sqlite3Handle db)
à Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
à Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReader(CommandBehavior behavior)
à System.Data.Common.DbCommand.ExecuteReader()
à Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, String executeMethod, IReadOnlyDictionary`2 parameterValues, Boolean closeConnection)
à Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
à Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.BufferlessMoveNext(Boolean buffer)
à Microsoft.EntityFrameworkCore.Storage.Internal.NoopExecutionStrategy.Execute[TState,TResult](Func`2 operation, Func`2 verifySucceeded, TState state)
à Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, Func`2 operation, TState state)
à Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.MoveNext()
à Microsoft.EntityFrameworkCore.Query.QueryMethodProvider.<_ShapedQuery>d__3`1.MoveNext()
à Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.<_TrackEntities>d__15`2.MoveNext()
à Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext()
à System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
à System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
à Dodo.GapTable.LoadData() dans d:\SYNC\DLSFile\Dodo\Table\GapTable.cs:ligne 35
Sembra che tu stia riscontrando un problema di migrazione.
Il tuo "nuovo" database che sta funzionando probabilmente utilizza la migrazione più aggiornata.
Quando si prova ad accedere a un file di database "vecchio", probabilmente non è stata ancora applicata la migrazione a quel file e, poiché i modelli sono stati modificati, non corrispondono più allo schema del database e causano un errore.
Per completare una migrazione per i vecchi database, assicurarsi che il vecchio database sia mirato correttamente dalla stringa di connessione nella classe DbContext
, quindi eseguire il comando update-database
(dal PowerShell VS) o dotnet ef database update --project {your-project-path}
(dalla riga di comando)
Microsoft Docs: https://docs.microsoft.com/en-us/ef/core/managing-schemas/