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

时间:2014-06-16 19:33:14

标签: mysql entity-framework

所以,我试图在实体框架中实现具有多个结果集的存储过程。 这一切似乎都太容易了。 但是,我没有为我的结果集获取任何行(尽管,似乎我确实得到了结果集)。

我做了什么:

  1. 创建了返回3个结果集的存储过程
  2. 创建表示返回值的复杂类型
  3. 按照Stored Procedures with Multiple Result Sets
  4. 手动编辑edmx文件
  5. 3失败并尝试了同一页面的代码版本,但仍然没有回来。
  6. 将代码还原为3。
  7. 我的edmx文件(仅限相关内容):

      <FunctionImport Name="getGlobalReport2">
        <ReturnType Type="Collection(MTModel.GlobalReport2)"/>
        <ReturnType Type="Collection(MTModel.GlobalReport2)"/>
        <ReturnType Type="Collection(MTModel.GlobalReport2)"/>
        <Parameter Name="regions" Mode="In" Type="String" />
        <Parameter Name="countries" Mode="In" Type="String" />
        <Parameter Name="companySizes" Mode="In" Type="String" />
        <Parameter Name="products" Mode="In" Type="String" />
      </FunctionImport>
    
      <FunctionImportMapping FunctionImportName="getGlobalReport2" FunctionName="MTModel.Store.getGlobalReport2" >
        <ResultMapping>
          <ComplexTypeMapping TypeName="MTModel.GlobalReport2" />
        </ResultMapping>
        <ResultMapping>
          <ComplexTypeMapping TypeName="MTModel.GlobalReport2" />
        </ResultMapping>
        <ResultMapping>
          <ComplexTypeMapping TypeName="MTModel.GlobalReport2" />
        </ResultMapping>
      </FunctionImportMapping>
    

    我的代码:

    var x = mtEntities.getGlobalReport2(regions, countries, companySizes, products);
    Response.Write(x.Count());
    
    var y = x.GetNextResult<GlobalReport2>();
    Response.Write(y.Count());
    
    var z = x.GetNextResult<GlobalReport2>();
    

    我已经检查了什么:

    1. 检查服务器是否按How can I view live MySQL queries?
    2. 收到请求
    3. 运行我从服务器抓取的查询,并确保它返回结果集和行
    4. 调试应用程序以查看我在路上没有错过的例外
    5. 除了没有返回任何行外,调用或应用程序似乎没有问题。 有什么建议吗?

      编辑: 根据你对edmx被覆盖的评论,只有当我从数据库重新生成模型时才会发生这种情况,而不是我更新它。 我不会期待任何其他东西,因为它重新生成了模型。

1 个答案:

答案 0 :(得分:4)

你认为你应该为你创建的复杂类型定义一些属性吗?例如:

<FunctionImportMapping FunctionImportName="GetGrades" 
                       FunctionName="SchoolModel.Store.GetGrades" >
  <ResultMapping>
    <ComplexTypeMapping TypeName="SchoolModel.GradeInfo">
      <ScalarProperty Name="EnrollmentID" ColumnName="enroll_id"/>
      <ScalarProperty Name="CourseID" ColumnName="course_id"/>
      <ScalarProperty Name="StudentID" ColumnName="student_id"/>
      <ScalarProperty Name="Grade" ColumnName="grade"/>
    </ComplexTypeMapping>
  </ResultMapping>
</FunctionImportMapping>

同时检查this

同样正如迈克在您的问题评论中所说的那样,如果您将来更新您的edmx文件,如果它重新生成,您将会失去自定义。