如何使用 EF 和 Spatialite 修复 "SQLite Error 1: 'The specified module could not be found."
How to fix "SQLite Error 1: 'The specified module could not be found." with EF and Spatialite
我正在用 EntityFrameworkCore.Sqlite.NetTopologySuite 创建一个空间数据库来暂时存储一个点,但最终会存储线等。我使用空间数据文档作为参考 https://docs.microsoft.com/en-us/ef/core/modeling/spatial#sqlite。需要将数据保存到 Spatialite 数据库中。
阅读文档后,我反映了代码,因为它在选项构建器(下方)中包括 "UseNetTopology",并在 class.
中创建了一个点
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=TestDb.db", x => x.UseNetTopologySuite());
}
当我尝试使用 update-database
更新数据库时,我收到错误消息:
SQLite Error 1: 'The specified module could not be found.'.
我试图通过创建一个空白项目并从头开始工作来找到问题,但结果出现了同样的错误。
这是整个日志:
'.
at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteNonQuery()
at Microsoft.EntityFrameworkCore.Infrastructure.SpatialiteLoader.Load(DbConnection connection)
at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.LoadSpatialite()
at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
SQLite Error 1: 'The specified module could not be found.
'.
我找不到其他有相同问题的 post。
编辑 2019 年 8 月 19 日:
我刚刚创建了一个新的空白项目,通过从 Spatialite 网站安装并使用 SQLite 连接到空间数据库,在没有 entity framework 的情况下进行测试。我在手动操作时收到了同样的错误,所以这可能是 Spatialite 的问题?
我正在用 EntityFrameworkCore.Sqlite.NetTopologySuite 创建一个空间数据库来暂时存储一个点,但最终会存储线等。我使用空间数据文档作为参考 https://docs.microsoft.com/en-us/ef/core/modeling/spatial#sqlite。需要将数据保存到 Spatialite 数据库中。
阅读文档后,我反映了代码,因为它在选项构建器(下方)中包括 "UseNetTopology",并在 class.
中创建了一个点protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=TestDb.db", x => x.UseNetTopologySuite());
}
当我尝试使用 update-database
更新数据库时,我收到错误消息:
SQLite Error 1: 'The specified module could not be found.'.
我试图通过创建一个空白项目并从头开始工作来找到问题,但结果出现了同样的错误。
这是整个日志:
'.
at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteNonQuery()
at Microsoft.EntityFrameworkCore.Infrastructure.SpatialiteLoader.Load(DbConnection connection)
at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.LoadSpatialite()
at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
SQLite Error 1: 'The specified module could not be found.
'.
我找不到其他有相同问题的 post。
编辑 2019 年 8 月 19 日: 我刚刚创建了一个新的空白项目,通过从 Spatialite 网站安装并使用 SQLite 连接到空间数据库,在没有 entity framework 的情况下进行测试。我在手动操作时收到了同样的错误,所以这可能是 Spatialite 的问题?