.NET 4.5 Beta版DbGeography NotImplementedException(

2019-06-23 13:08发布

我有我安装了.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团队希望重用一个历史的事情。 这不是很清楚,这是一个基于提供商的实现无论是。 一个更好的异常信息将有可能挽救了一天的工作。

Answer 1:

在实体框架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



Answer 2:

也许有人可以突出darwindaves答案:

安装NuGet包Microsoft.SqlServer.Types。 或者引用添加到:

C:\ Program Files文件(x86)的\ Microsoft SQL Server的\ 100 \ SDK \组件\ Microsoft.SqlServer.Types.dll并确保标志着属性复制本地。



Answer 3:

通过@Pawal接受的答案有助于解决我同样的问题。 他的链接“的Microsoft SQL Server 2008 Service Pack 3的功能包”给我留下了一个在黑暗中位关于我实际需要安装在目标机器上,但最终确立我只需要如下:

ENU \ 64 \ SQLSysClrTypes.msi



Answer 4:

除了增加

C:\ Program Files文件(x86)的\ Microsoft SQL Server的\ 100个\ SDK \组件\ Microsoft.SqlServer.Types.dll

我还需要添加

SqlServerSpatial110.dll

一旦我们增加了那些它的工作就像一个魅力!



文章来源: .NET 4.5 Beta DbGeography NotImplementedException