我有我安装了.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测试版,然后代码工作正常。 任何想法,为什么? 缺什么?
更新答案
感谢帕维尔。 你需要有安装SQL CLR类型。 你可以得到2012版在此链接:
微软系统CLR类型为Microsoft®SQLServer®上2012 http://www.microsoft.com/download/en/details.aspx?id=29065
意见
我真的不明白,为什么在.NET框架具有SQL Server上的依赖。 没有什么特别的这些类。 我意识到这可能是其中代码最初是由SQL小组撰写和.NET团队希望重用一个历史的事情。 这不是很清楚,这是一个基于提供商的实现无论是。 一个更好的异常信息将有可能挽救了一天的工作。
在实体框架DefaultSpatialServices使用SqlGeography和SqlGeometry类型为后盾的类型。 这两类住在Microsoft.SqlServer.Types.dll组件不是.NET Framework的一部分。 当EF无法找到这些类型时引发的异常(异常可能是更有帮助...)。 当您安装Visual Studio就会在机器上安装的LocalDB(或者你可能已经有了一个SQLEXPRESS数据库),这可能是你是如何得到这工作的机器上类型的方式。 在一台机器中仅有的.NET Framework安装,而不是Sql Server中,你不会有这些类型。 您可以在这里你会得到异常的机器上安装SQLEXPRESS或者你可以尝试仅安装类型。 我不知道从哪里得到大会本身,但我认为SQL Server功能包( http://www.microsoft.com/en-us/download/details.aspx?id=27596 )可以拥有它。 从2008年的SqlServer和SQLServer 2012类型的支持,所以你安装的版本,它不应该的问题。
编辑
在EF6异常将包含一个更好的消息看: https://entityframework.codeplex.com/SourceControl/changeset/b3eca2c141c0fb517504f9731dc8ba7a9c5727ee
工作项用于跟踪这个bug: https://entityframework.codeplex.com/workitem/3
也许有人可以突出darwindaves答案:
安装NuGet包Microsoft.SqlServer.Types。 或者引用添加到:
C:\ Program Files文件(x86)的\ Microsoft SQL Server的\ 100 \ SDK \组件\ Microsoft.SqlServer.Types.dll并确保标志着属性复制本地。
通过@Pawal接受的答案有助于解决我同样的问题。 他的链接“的Microsoft SQL Server 2008 Service Pack 3的功能包”给我留下了一个在黑暗中位关于我实际需要安装在目标机器上,但最终确立我只需要如下:
ENU \ 64 \ SQLSysClrTypes.msi
除了增加
C:\ Program Files文件(x86)的\ Microsoft SQL Server的\ 100个\ SDK \组件\ Microsoft.SqlServer.Types.dll
我还需要添加
SqlServerSpatial110.dll
一旦我们增加了那些它的工作就像一个魅力!