1

我们正在尝试将 .NET 4.5.2 项目移植到 5.0。

我的特殊问题是让空间查询工作。现有代码广泛使用 System.Data.Entity.Spatial.DbGeometry 类型,这在 .NET 5.0 中似乎不可用。

环顾四周,当针对 SqlServer 运行时,建议是使用 NetTopologySuite,这很容易,因为我们已经在使用它了。

说明在这里:

空间数据

要通过 NTS 启用到空间类型的映射,请在提供程序的 DbContext 选项构建器上调用 UseNetTopologySuite 方法。例如,对于 SQL Server,您可以这样称呼它。

options.UseSqlServer(
    @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=WideWorldImporters",
        x => x.UseNetTopologySuite());

我的问题是我们没有调用 options.UseSqlServer。在我们旅程的这一点上,我们正在使用try-convert将我们的项目从 .NET 4.5 移动到 .NET 5.0,这并没有使用 options.UseSqlServer() 配置 EntityFramework,它仍在使用 app.config 文件进行配置.

对于这个项目,我们的 EF 配置如下:

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>

<connectionStrings>
  <!-- -->
</connectionStrings>

<appSettings>
  <!-- -->
</appSettings>

<entityFramework codeConfigurationType="ourcustom.DbConfigurator, ourassembly">
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  <providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
  </providers>
</entityFramework>

关于我们如何配置 EF 以将 NTS 类型用于地理空间数据的任何想法?

===

从评论:

您不能混合使用 EF Core 和 EF Classic。– ErikEJ 6 分钟前

这似乎正是我们正在做的事情。

我们在 .NET 5.0 项目中使用 Entity Framework 6.4.0,我引用的文档页面是关于 Entity Framework Core 的。

这可能会使整个方法无效。我无法将 EF Classic 配置为将 NTS 类型用于空间数据。

但它仍然给我们留下了潜在的问题。

每当我们尝试访问 Microsoft.SqlServer.Types 对象时,都会出现异常:

System.InvalidOperationException:此提供程序无法使用空间类型和函数,因为找不到程序集 'Microsoft.SqlServer.Types' 版本 10 或更高版本。

而且我们仍然需要能够进行空间查询。

我们有哪些选择?

4

0 回答 0