我将 Entity Framework 6 与 .Net 4.5 结合使用。我有一个选择和返回数据的存储过程。返回列之一是地理类型。
在 Visual Studio 2015 中,我右键单击 .edmx 文件,单击“从数据库更新模型...”。此操作获取我的存储过程并创建复杂类型的 storedprocedurename_Result
。除地理类型外,所有列均以复杂类型对象表示。
同时,我的一张表也有地理类型,但该表使用地理列成功检索,并且运行正常。因此,我可以猜测 EF 支持地理类型并且正在运行。
但我不知道为什么它在生成的复杂类型中没有为我生成那个类型。
我试过手动添加
public System.Data.Entity.Spatial.DbGeography col_name { get; set; }
但结果为空。
作为记录,我已尝试在 SQL Server Management Studio 中执行该过程,并且该列存在于那里。所以,问题出在 EF 中,而不是在数据库中。
我已经搜索并得到了几个这样的问题,但似乎没有人能够回答他们。
我无法理解对这个问题的回答。
- http://www.scriptscoop.net/t/2758a3668fde/geography-column-returned-in-stored-procedure-not-shown-in-entity-fram.html
它是 stackoverflow 上的一个 - Geography column returned in stored procedure not shown in Entity Framework auto generated complex type _
提出上述问题的人使用了一种解决方法,正如他在评论中所说:“不。我不认为您可以自动获取地理类型。因为当您在模型浏览器中查看结果时,它会显示“不支持”。为了解决这个问题,我的存储过程通过 [pro_GeoLocation].STAsText() as pro_GeoLocationPoint 将地理类型转换为字符串。然后我在 C# 代码中使用正则表达式来获取经度和纬度。”但这不是一个好的选择,必须有一个解决方案。
最佳答案
好吧...
正如我所料(看到以前的帖子这样)这个问题没有答案,所以现在当我解决了这个问题后,我将链接分享让我获得地理对象的解决方案。
我尝试了很多事情并尝试了很多解决方案,我多次从 edmx 中删除了我的程序和 SP 条目。并重新创建,但一切都是徒劳的!
比起工作如此简单...按照下面的链接,我刚刚打开了 edmx,然后打开了模型浏览器,在模型浏览器中转到缺少该列的复杂类型定义,右键单击添加->标量属性->地理。并准确地给它取一个存储过程返回的名字。
就是这样,保存更改并运行您的代码,您必须像我获取的那样正确获取数据。
我想知道为什么 EF 无法获取数据以及获取函数/SP 的列信息提到的 EDM 类型不受支持。战略!
引用: http://www.scriptscoop.net/t/7c1ed5a0f89e/entity-framework-5-function-import-with-spatial-data.html
关于c# - Entity Framework 未从 SQL Server 存储过程中获取空间类型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34413287/