EF 6 - 存储过程重复结果列

时间:2014-09-15 13:42:47

标签: sql-server entity-framework stored-procedures facebook-c#-sdk legacy

我正在从遗留系统迁移过程中。无法修改数据库 - 包括添加/修改存储过程。

我已成功将存储过程添加到EDMX模型,它生成了以下代码:

public virtual ObjectResult<sp_GetUserInfoByUID_Result> sp_GetUserInfoByUID(Nullable<System.Guid> sessionID, Nullable<System.Guid> userUID)
{
    var sessionIDParameter = sessionID.HasValue ?
            new ObjectParameter("SessionID", sessionID) :
            new ObjectParameter("SessionID", typeof(System.Guid));

    var userUIDParameter = userUID.HasValue ?
            new ObjectParameter("userUID", userUID) :
            new ObjectParameter("userUID", typeof(System.Guid));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<sp_GetUserInfoByUID_Result>("sp_GetUserInfoByUID", sessionIDParameter, userUIDParameter);
}

但是,我收到以下运行时错误:

  

数据阅读器与指定的“MyApp.Repository.sp_GetUserInfoByUID_Result”不兼容。类型为“useraccount_uid1”的成员在数据读取器中没有相应的具有相同名称的列。

因此看起来EF生成了两个映射:useraccount_uiduseraccount_uid1。这是因为存储过程返回一个包含两列名为useraccount_uid的表。

有没有办法在EF模型中解决这个问题?

1 个答案:

答案 0 :(得分:2)

事实证明解决方案非常简单,我只是忽略了EF建模存储过程的方式。向模型添加存储过程时,默认情况下它实际上会添加几个引用。

  1. 从模型到数据库中基本功能的映射 - 您无法编辑这些映射。
  2. A&#34;功能导入&#34; - 这是将结果集映射到代码模型的部分。
  3. 所以我只需要在EDMX模型浏览器中查找Function Imports文件夹。在这里列出了存储过程。如果右键单击该功能,您将看到&#34;功能导入映射&#34;选项。这将打开Mappings Detail窗口。在这里,我可以简单地更正列命名。