我正在从遗留系统迁移过程中。无法修改数据库 - 包括添加/修改存储过程。
我已成功将存储过程添加到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_uid
和useraccount_uid1
。这是因为存储过程返回一个包含两列名为useraccount_uid
的表。
有没有办法在EF模型中解决这个问题?
答案 0 :(得分:2)
事实证明解决方案非常简单,我只是忽略了EF建模存储过程的方式。向模型添加存储过程时,默认情况下它实际上会添加几个引用。
所以我只需要在EDMX模型浏览器中查找Function Imports文件夹。在这里列出了存储过程。如果右键单击该功能,您将看到&#34;功能导入映射&#34;选项。这将打开Mappings Detail窗口。在这里,我可以简单地更正列命名。