C# DbGeography.PolygonFromText与DbGeography.FromText

C# DbGeography.PolygonFromText与DbGeography.FromText,c#,sql,.net,geospatial,C#,Sql,.net,Geospatial,在尝试从已知文本形成多边形时,似乎DbGeography.PolygonFromText和DbGeography.FromText正在利用两种不同的SQL Server空间类型源。我想知道是否有人曾经遇到过同样的问题,或者知道这是否是一个设计意图 我第一次遇到这个错误是在处理一些部署问题时。试图从DbGeography构建DbGeography。PolygonFromText需要SQL Server 2012的SQL Server空间类型(我已经尝试了SQL Server空间CLR类型的较新版本

在尝试从已知文本形成多边形时,似乎
DbGeography.PolygonFromText
DbGeography.FromText
正在利用两种不同的SQL Server空间类型源。我想知道是否有人曾经遇到过同样的问题,或者知道这是否是一个设计意图

我第一次遇到这个错误是在处理一些部署问题时。试图从
DbGeography构建
DbGeography
。PolygonFromText
需要SQL Server 2012的SQL Server空间类型(我已经尝试了SQL Server空间CLR类型的较新版本,但都不起作用)。或者,
DbGeography.FromText
似乎能够从已知文本生成
DbGeography
对象,而无需此要求


我已经在下面的应用程序中隔离了这个问题。包括最新的
Microsoft.SqlServer.Types
包并运行以下程序,将生成下面列出的输出-

使用系统;
使用System.Data.Spatial;
命名空间DBGeographySter
{
班级计划
{
私有静态DbGeography wrapdbgeography创建(Func geographyFactory)
{
尝试
{
返回geographyFactory();
}
捕获(异常exc)
{
WriteLine($“捕获的异常:[{exc}]”);
}
返回null;
}
公共静态void Main(字符串[])
{
var polyText=“POLYGON((80.0-30.0,81.0-31.0,82.0-32.0,80.0-30.0))”;
Console.WriteLine($“正在尝试DbGeography.PolygonFromText(\“{polyText}\”,4326)”;
Console.WriteLine(WrapDbGeographyCreation(()=>DbGeography.PolygonFromText(polyText,4326));
Console.WriteLine($“正在尝试DbGeography.FromText(\“{polyText}\”,4326)”;
Console.WriteLine(WrapDbGeographyCreation(()=>DbGeography.FromText(polyText,4326));
}
}
}
/*将输出-
正在尝试DbGeography.PolygonFromText(“POLYGON((80.0-30.0,81.0-31.0,82.0-32.0,80.0-30.0))”,4326)
捕获的异常:[System.NotImplementedException:未实现该方法或操作。
位于System.Data.Spatial.DefaultSpatialServices.GeographyPolygonFromText(字符串geographyText,Int32 spatialReferenceSystemId)
位于System.Data.Spatial.DbGeography.PolygonFromText(字符串polygonWellKnownText,Int32 CoordinationSystemId)
在D:\db geography creator\dbgeographyster\dbgeographyster\dbgeographyster\Program.cs中的dbgeographyster.Program.c\uuuu DisplayClass1\u 0.b\uuu 0():第26行
在D:\db geography creator\dbgeographyter\dbgeographyter\Program.cs中的dbgeographyter.Program.WrapDbGeographyCreation(Func`1 geographyFactory)处:第12行]
正在尝试DbGeography.FromText(“多边形((80.0-30.0,81.0-31.0,82.0-32.0,80.0-30.0))”,4326)
SRID=4326;多边形((80.0-30.0,81.0-31.0,82.0-32.0,80.0-30.0))
*/
然后,从此处提供的SQL Server 2012功能包(SQLSysClrTypes.msi)中安装“Microsoft System CLR Types for SQL Server 2012”后,我们将获得以下输出-

/*
正在尝试DbGeography.PolygonFromText(“POLYGON((80.0-30.0,81.0-31.0,82.0-32.0,80.0-30.0))”,4326)
SRID=4326;多边形((80-30,81-31,82-32,80-30))
正在尝试DbGeography.FromText(“多边形((80.0-30.0,81.0-31.0,82.0-32.0,80.0-30.0))”,4326)
SRID=4326;多边形((80-30,81-31,82-32,80-30))
*/

为什么
System.Data.Spatial.DbGeography
依赖两个独立的解析器从已知文本生成
DbGeography
多边形?而且,为什么它会依赖这样一个旧版本的SQL Server CLR类型(SqlSpatial110.dll),而不是任何更新的类型呢??非常令人困惑。

你读过吗?您的问题的哪些具体部分没有解决?我想将应用程序及其所有需求一起部署,要求用户下载过时(2008或2012)版本的SQL Server CLR类型似乎有点奇怪,并增加安装包的总大小,以解决此问题。
Microsoft.SqlServer.Types
当前随
SqlServerSpatial140.dll
(上次选中)。它还指示您确保安装了Microsoft SQL CLR类型,或从
bin
目录手动加载
SqlServerSpatial*.dll
,正如此答案从同一问题中所建议的那样-在安装的最新版本的
Microsoft.SqlServer.types
中,使用它附带的
SqlServerSpatial*.dll
,还需要安装CLR类型的旧版本以使其工作,这对我来说是违反直觉的。不过,我并不完全清楚您的问题是什么。你知道它需要什么。你需要给它所需要的。如果您的问题是“为什么需要它?”答案可能是“因为他们就是这样编码的”。
我想将应用程序及其所有需求一起部署,
您可以在应用程序安装中包括CLR Types安装包吗?