cra*_*ock 6 entity-framework spatial .net-4.5 visual-studio-2012
我有一个全新的服务器,我安装了.NET 4.5 Beta可再发行组件.尝试使用空间功能时,我收到一个NotImplemented异常.这段代码......
var x = DbGeography.PointFromText(string.Format("POINT({0} {1})", -45, 45), 4326);
Run Code Online (Sandbox Code Playgroud)
抛出这个例外......
System.NotImplementedException: The method or operation is not implemented.
at System.Data.Spatial.DefaultSpatialServices.GeographyPointFromText(String geographyText, Int32 spatialReferenceSystemId)
Run Code Online (Sandbox Code Playgroud)
如果我安装完整的VS.NET 11 Beta,那么代码工作正常.有什么想法吗?缺什么?
更新答案
感谢Pawel.您需要安装SQL CLR类型.您可以在此链接上获得2012版本:
Microsoft®SQLServer®2012的Microsoft®SystemCLR类型 http://www.microsoft.com/download/en/details.aspx?id=29065
意见
我真的不明白为什么.NET框架依赖于SQL Server.这些课程没有什么特别之处.我意识到这可能是一个历史性的事情,其中代码最初由SQL团队编写,.NET团队希望重用它.目前还不是很清楚这是基于提供商的实现.更好的异常消息可以节省一天的工作量.
Paw*_*wel 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
归档时间: |
|
查看次数: |
3829 次 |
最近记录: |