存储过程中返回的地理列未显示在实体框架自动生成的复杂类型中

Posted

技术标签:

【中文标题】存储过程中返回的地理列未显示在实体框架自动生成的复杂类型中【英文标题】:Geography column returned in stored procedure not shown in Entity Framework auto generated complex type 【发布时间】:2015-02-18 19:21:46 【问题描述】:

我将 Entity Framework 6 与 .Net 4.5 一起使用。我有一个选择并返回数据的存储过程。返回列之一是地理类型。

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

我不想手动修改复杂类型。我想通过单击“从数据库更新模型...”自动获取它。 Entity Framework 6 支持这个吗?实现此功能的步骤是什么?

【问题讨论】:

您找到正确生成地理类型的方法了吗?我遇到了和你一样的问题。 没有。我认为您不能自动获取地理类型。因为当您在模型浏览器中查看结果时,它会显示“不支持”。为了解决这个问题,我的存储过程通过 [pro_GeoLocation].STAsText() as pro_GeoLocationPoint 将地理类型转换为字符串。然后我在我的 C# 代码中使用正则表达式来获取经纬度。 我认为这不是一个合适的解决方案,但这是一个应该有效的解决方法...我在这里也发布了一个类似的问题:***.com/questions/34413287/…> 以防有人在寻找为解决方案,该问题得到正确的答案...... 【参考方案1】:

Entity Framework 不会自动处理此问题,但在导入过程后添加 geography 列非常简单。

    在模型浏览器中,搜索或导航到存储过程的复杂类型。右键单击,然后选择添加 -> 标量属性 -> 地理(或您缺少的任何其他类型):

    输入您的专栏名称:

    保存您的模型。

【讨论】:

以上是关于存储过程中返回的地理列未显示在实体框架自动生成的复杂类型中的主要内容,如果未能解决你的问题,请参考以下文章

实体框架中存储过程的返回值映射

在实体框架数据库优先方法中,如何从存储过程返回多个结果集?

使用实体框架核心生成和访问存储过程

实体框架,具有返回类型的函数导入:无..返回 int?

实体框架 - 具有多个结果集的存储过程 - 没有行返回

实体框架 4 函数导入不起作用