从Enitiy Framwork 5到MySQL的存储过程调用

时间:2017-12-28 12:04:08

标签: c# mysql entity-framework

我正在尝试从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; }
        }
    }

但我仍然得到空值 -

enter image description here

1 个答案:

答案 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等效。