.NET 4.5 Beta DbGeography NotImplementedException

时间:2012-04-12 03:30:28

标签: entity-framework spatial visual-studio-2012 .net-4.5

我有一台全新的服务器,我安装了.NET 4.5 Beta可再发行服务器。尝试使用空间功能时,我收到一个NotImplemented异常。这段代码......

var x = DbGeography.PointFromText(string.Format("POINT({0} {1})", -45, 45), 4326);

引发此异常......

System.NotImplementedException: The method or operation is not implemented.
at System.Data.Spatial.DefaultSpatialServices.GeographyPointFromText(String geographyText, Int32 spatialReferenceSystemId)

如果我安装完整的VS.NET 11 Beta,那么代码工作正常。有什么想法吗?缺少什么?

更新答案

感谢Pawel。您需要安装SQL CLR类型。您可以通过以下链接获取2012版本:

Microsoft®SQLServer®2012的Microsoft®SystemCLR类型 http://www.microsoft.com/download/en/details.aspx?id=29065

OPINION

我真的不明白为什么.NET框架依赖于SQL Server。这些课程没有什么特别之处。我意识到这可能是一个历史性的事情,其中​​代码最初由SQL团队编写,.NET团队希望重用它。目前还不是很清楚这是基于提供商的实现。一个更好的异常消息可以节省一天的工作。

4 个答案:

答案 0 :(得分:15)

Entity Framework中的DefaultSpatialServices使用SqlGeography和SqlGeometry类型作为支持类型。这两种类型存在于不属于.NET Framework的Microsoft.SqlServer.Types.dll程序集中。当EF无法找到这些类型时抛出异常(异常可能更有帮助......)。当您安装Visual Studio时,它将在您的计算机上安装localdb(或者您可能已经有一个SqlExpress数据库),这可能就是您在正在运行的计算机上获取该类型的方式。在只安装了.NET Framework而不是Sql Server的计算机上,您将没有这些类型。您可以在获得异常的框中安装SqlExpress,也可以尝试仅安装类型。我不知道在哪里获得程序集本身,但我认为Sql Server功能包(http://www.microsoft.com/en-us/download/details.aspx?id=27596)可能有它。支持SqlServer 2008和SqlServer 2012中的类型,因此无论您安装哪个版本都无关紧要。

修改

在EF6中,异常将包含更好的消息,请参阅:https://entityframework.codeplex.com/SourceControl/changeset/b3eca2c141c0fb517504f9731dc8ba7a9c5727ee

用于跟踪此错误的工作项:https://entityframework.codeplex.com/workitem/3

答案 1 :(得分:2)

也许有人可以强调darwindaves的回答:

安装nuget包Microsoft.SqlServer.Types。或者添加对以下内容的引用:

c:\ Program Files(x86)\ Microsoft SQL Server \ 100 \ SDK \ Assemblies \ Microsoft.SqlServer.Types.dll并确保在属性中标记copy local。

答案 2 :(得分:1)

@Pawal接受的答案帮助解决了我同样的问题。他与“ Microsoft SQL Server 2008 Service Pack 3功能包”的链接使我有些疑惑,因为我实际上需要在目标计算机上安装什么,但最终,我只需要满足以下条件:

ENU \ x64 \ SQLSysClrTypes.msi

答案 3 :(得分:0)

除了添加

  

c:\ Program Files(x86)\ Microsoft SQL   服务器\ 100个\ SDK \装配\ Microsoft.SqlServer.Types.dll

我还需要添加

  

SqlServerSpatial110.dll

一旦我们添加了它,它就像一个魅力!