Entity Framework 未从 Sql 服务器存储过程的结果中获取空间类型数据

Entity Framework not getting Spatial type data in result from Sql Server stored procedure

我在 .Net 4.5 中使用 Entity Framework 6。我有一个选择和 returns 数据的存储过程。 return 列之一是地理类型。

在 Visual Studio 2015 年,我右键单击 .edmx 文件,单击“从数据库更新模型...”。此操作获取我的存储过程并创建一个复杂类型 storedprocedurename_Result。除地理类型外,所有列均以复杂类型对象表示。

同时,我的 table 之一也有地理类型,但 table 通过地理列成功检索并且运行正常。因此,我可以猜测 EF 支持地理类型并且正在运行。

但是我不知道为什么它在生成的复杂类型中没有为我生成那个类型。

我试过手动添加

public System.Data.Entity.Spatial.DbGeography col_name { get; set; } 

但结果为空。

郑重声明,我已尝试在 SQL Server Management Studio 中执行该过程,并且该列存在于那里。所以,问题出在 EF - 不在数据库中。

我搜索了几个这样的问题,但似乎没有人能够回答。

我无法理解对这个问题的回答。

提出上述问题的人使用了一种解决方法,正如他在评论中所说的“不。我不认为你可以自动获取地理类型。因为当你在模型浏览器中查看结果时,它说“不支持“。为了解决这个问题,我的存储过程通过 [pro_GeoLocation].STAsText() as pro_GeoLocationPoint 将地理类型转换为字符串。然后我在 C# 代码中使用正则表达式来获取又长又纬。”但这不是一个好的选择,必须有一个解决方案。

好的...
正如我所料(看到以前的帖子这样)这个问题没有答案,所以现在当我解决了这个问题后,我将 linke 分享让我获得地理对象的解决方案。

我尝试了很多事情并尝试了很多解决方案,我多次从 edmx 中删除了我的程序和 SP 条目。并重新创建,但一切都是徒劳的!
比工作是如此简单......按照下面的 link 我刚刚打开 edmx,然后打开模型浏览器,在模型浏览器中转到缺少列的复杂类型定义,右键单击添加->标量 属性->地理。并准确命名为存储过程返回的名称。
就是这样,保存更改和 运行 你的代码,你必须像我得到的那样正确地获取你的数据。
我想知道为什么 EF 无法获取数据和获取列信息function/SP 它提到了不支持的 EDM 类型。战略!

参考: http://www.scriptscoop.net/t/7c1ed5a0f89e/entity-framework-5-function-import-with-spatial-data.html