我正在尝试从Entity fromawork 5.0到MySQL进行存储过程调用。我能够连接到MySQL,但是当我调用存储过程时,我得到了空的entites(没有数据)。我怎么能解决这个问题 -
下面我用来调用存储过程的代码 -
public virtual ObjectResult<usp_GetFileType_Result> usp_GetFileType()
{
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<usp_GetFileType_Result>("usp_GetFileType");
}
我观察到更多的事情是,每当我从存储的porcedure更新.edmx文件时,我都会得到这样的空模型 -
namespace MySQLwithEntity
{
using System;
public partial class usp_GetFileType_Result
{
}
}
所以我手动填写如下 -
namespace MySQLwithEntity
{
using System;
public partial class usp_GetFileType_Result
{
public int FileTypeId { get; set; }
public string FileTypeName { get; set; }
}
}
但我仍然得到空值 -
答案 0 :(得分:0)
经过几个小时的搜索,我找到了解决方案。这可能对某人有帮助 -
从MySQL调用SP的上述方法的原因是自动生成的实体模型是空白的.edmx文件没有生成从MySQL SP返回的列的映射。
namespace MySQLwithEntity
{
using System;
public partial class usp_GetFileType_Result
{
}
}
手动放置权利 -
namespace MySQLwithEntity
{
using System;
public partial class usp_GetFileType_Result
{
public int FileTypeId { get; set; }
public string FileTypeName { get; set; }
}
}
在.edmx文件中手动创建mappinng,如下所示,虽然不推荐,但我别无选择。当您将其作为xml文件打开时,.edmx文件必须编辑“CSDL内容”部分和“C-S映射内容”部分 -
<FunctionImportMapping FunctionImportName="usp_GetFileType" FunctionName="Model1.Store.usp_GetFileType">
<ResultMapping>
<ComplexTypeMapping TypeName="Model1.usp_GetFileType_Result">
<ScalarProperty Name="FileTypeId" ColumnName="FileTypeId" />
<ScalarProperty Name="FileTypeName" ColumnName="FileTypeName" />
</ComplexTypeMapping>
</ResultMapping>
</FunctionImportMapping>
第二个是调用SP的代码。我改变了代码来调用SP,如下所示 -
public virtual IList<usp_GetFileType_Result> GetCustOrderHist()
{
IList<usp_GetFileType_Result> data = ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<usp_GetFileType_Result>("CALL usp_GetFileType();").ToList();
return data;
}
MySQL中的 Call
与MS {的EXEC
等效。