c# - Entity Framework 未从 SQL Server 存储过程中获取空间类型数据

标签 c# sql-server entity-framework stored-procedures spatial

我将 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 中,而不是在数据库中。

我已经搜索并得到了几个这样的问题,但似乎没有人能够回答他们。

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

提出上述问题的人使用了一种解决方法,正如他在评论中所说:“不。我不认为您可以自动获取地理类型。因为当您在模型浏览器中查看结果时,它会显示“不支持”。为了解决这个问题,我的存储过程通过 [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/

相关文章:

c# - 使用 LINQ 和 Entity Framework (核心)从一个 SQL 查询中的多个表中提取数据

c# - 有什么方法可以捕获任何生成的线程中的异常吗?

c# - 自定义配置提供程序未加载异常

sql - 如何将字符串分成不同的列?

sql - 在 SQL Server 中查找日期的简单选择查询问题

c# - Linq to SQL VS Entity Framework

c# - Serilog - 如何自定义滚动文件名中的日期?

c# - 对 C# 字符的特殊含义感到困惑

sql-server - T-SQL CASE 检查最年轻的日期,然后对照其他值

asp.net-mvc - 您自定义数据库IdentityDbContext