EF Core Создайте поле, которое не существует - PullRequest
0 голосов
/ 10 сентября 2018

Я использую Entity Framework Core - Code First для загрузки данных из файла SQLite. Проблема в том, что я обновил схему новых файлов БД SQLite и добавил поля в таблицу. Он отлично работает для вновь созданной БД. но когда я пытаюсь открыть старый файл, я получаю исключение. Я не очень понимаю EF. Мне нужна помощь, потому что у меня есть 2 вопроса:

  • Можно ли избежать получения исключения, если поле не существует? (Если это так, пример может быть очень хорошим)
  • Если нет, возможно ли автоматическое обновление файла SQLite, если поля отсутствуют?

Заранее спасибо.

Исключение, которое я получил:

Как видите, поле COMMENT в таблице 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

1 Ответ

0 голосов
/ 10 сентября 2018

Похоже, вы столкнулись с проблемой миграции.

Ваша «новая» база данных, которая работает, вероятно, использует самую современную миграцию.

При попытке доступа к «старому» файлу базы данных вы, вероятно, еще не применили миграцию к этому файлу, и, поскольку ваши модели изменились, они больше не соответствуют схеме базы данных и вызовут ошибку.

Чтобы выполнить миграцию для ваших старых баз данных, убедитесь, что на старую базу данных правильно нацелена строка подключения в вашем классе DbContext, а затем выполните команду update-database (из PowerShell VS) или dotnet ef database update --project {your-project-path} ( из командной строки)

Документы Microsoft: https://docs.microsoft.com/en-us/ef/core/managing-schemas/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...