我们正在尝试将 .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 或更高版本。
而且我们仍然需要能够进行空间查询。
我们有哪些选择?