从数据库中提取数据时无法转换 SqlGeography
Can't cast SqlGeography when withdrawing data from DB
我无法从 MS SQL 数据库获取 SqlGeography
对象,我使用 .net 核心应用程序和 linq2db 作为提供者,但我有一个例外:
"Can't create 'GIS_CH_DB.sys.geography' type or '' specific type for Geometry."
但我正在使用
var provider = (SqlServerDataProvider)DataConnection.GetRegisteredProviders()[LinqToDB.ProviderName.SqlServer2014];
provider.AddUdtType<SqlGeography>("Geography", null, LinqToDB.DataType.Udt);
provider.AddUdtType<SqlGeometry>("Geometry", null, LinqToDB.DataType.Udt);
应该投射 SQL地理来纠正对象。有人知道如何解决这个问题吗?
编辑:添加了 retrown 而不是 return null
如评论中所述,这是由于 sql 客户请求的空间类型程序集 (Microsoft.SqlServer.Types
) 与您拥有的实际程序集之间的版本冲突。虽然对于 .net 框架应用程序,您可以使用绑定重定向来处理它,但对于 .net 核心,您不能这样做,因为:
- .net core 中没有绑定重定向
- 即使会有 - 由于 public 键不同,它们将无法工作
您需要注册自定义程序集解析器来修复它(基于https://github.com/dotnet/core/issues/290#issuecomment-280451104):
// somewhere in your init code
AssemblyLoadContext.Default.Resolving += OnAssemblyResolve;
Assembly OnAssemblyResolve(AssemblyLoadContext assemblyLoadContext, AssemblyName assemblyName)
{
try
{
AssemblyLoadContext.Default.Resolving -= OnAssemblyResolve;
return assemblyLoadContext.LoadFromAssemblyName(assemblyName);
}
catch
{
if (assemblyName.Name == "Microsoft.SqlServer.Types")
return typeof(SqlGeography).Assembly;
throw;
}
finally
{
AssemblyLoadContext.Default.Resolving += OnAssemblyResolve;
}
}
我将更新 linq2db 文档以提及它,并检查我们是否可以改善这种情况
我无法从 MS SQL 数据库获取 SqlGeography
对象,我使用 .net 核心应用程序和 linq2db 作为提供者,但我有一个例外:
"Can't create 'GIS_CH_DB.sys.geography' type or '' specific type for Geometry."
但我正在使用
var provider = (SqlServerDataProvider)DataConnection.GetRegisteredProviders()[LinqToDB.ProviderName.SqlServer2014];
provider.AddUdtType<SqlGeography>("Geography", null, LinqToDB.DataType.Udt);
provider.AddUdtType<SqlGeometry>("Geometry", null, LinqToDB.DataType.Udt);
应该投射 SQL地理来纠正对象。有人知道如何解决这个问题吗?
编辑:添加了 retrown 而不是 return null
如评论中所述,这是由于 sql 客户请求的空间类型程序集 (Microsoft.SqlServer.Types
) 与您拥有的实际程序集之间的版本冲突。虽然对于 .net 框架应用程序,您可以使用绑定重定向来处理它,但对于 .net 核心,您不能这样做,因为:
- .net core 中没有绑定重定向
- 即使会有 - 由于 public 键不同,它们将无法工作
您需要注册自定义程序集解析器来修复它(基于https://github.com/dotnet/core/issues/290#issuecomment-280451104):
// somewhere in your init code
AssemblyLoadContext.Default.Resolving += OnAssemblyResolve;
Assembly OnAssemblyResolve(AssemblyLoadContext assemblyLoadContext, AssemblyName assemblyName)
{
try
{
AssemblyLoadContext.Default.Resolving -= OnAssemblyResolve;
return assemblyLoadContext.LoadFromAssemblyName(assemblyName);
}
catch
{
if (assemblyName.Name == "Microsoft.SqlServer.Types")
return typeof(SqlGeography).Assembly;
throw;
}
finally
{
AssemblyLoadContext.Default.Resolving += OnAssemblyResolve;
}
}
我将更新 linq2db 文档以提及它,并检查我们是否可以改善这种情况