EF Core创建一个不存在的字段

时间:2018-09-10 14:01:12

标签: c# entity-framework sqlite entity-framework-core

我正在使用Entity Framework Core-Code First从SQLite文件加载数据。 问题是我更新了新的SQLite DB文件的架构,并在表中添加了字段。对于新生成的数据库,它工作正常。但是,当我尝试打开旧文件时,出现了异常。我不太了解EF。我需要帮助,因为我有2个问题:

  • 如果该字段不存在,是否可以避免获取异常? (如果是这样,那么一个例子可能会很好)
  • 如果没有,是否可以在缺少字段的情况下自动更新SQLite文件?

谢谢。

我遇到的异常:

如您所见,表GAP中不存在COMMENT字段。

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 :(得分:0)

听起来您正在遇到迁移问题。

您正在运行的“新”数据库可能正在使用最新的迁移。

当尝试访问“旧”数据库文件时,您可能尚未将迁移应用于该文件,并且由于您的模型已更改,因此它们不再与数据库的架构匹配,将导致错误。

要完成旧数据库的迁移,请确保您的DbContext类中的连接字符串正确地定位了旧数据库,然后运行命令update-database(来自VS powershell)或dotnet ef database update --project {your-project-path}(从命令行)

Microsoft Docs:https://docs.microsoft.com/en-us/ef/core/managing-schemas/