【第22期】观点:IT 行业加班,到底有没有价值?

EF获取存储过程多返回结果

原创 2016年08月29日 17:37:19

在使用EF来获取存储过程结果时,当存储过程返回一个结果,那么我们可以使用生成的返回结果类即可,当返回多结果时,自动生成的就不够使用了,这时我们需要对生成的EF中xml文件进行配置。

环境要求:EF版本要求 5.0以上,项目的 .NET Framework 需要4.5以上。

配置:

1、找到函数导入配置项 FunctionImport,如下为自动生成的配置

  <FunctionImport Name="functionname" ReturnType="Collection(EFeModel.model)">
            <Parameter Name="flag" Mode="In" Type="Int32" />
            <Parameter Name="name" Mode="In" Type="varchar" />
          </FunctionImport>

将以上配置更改为如下,及将存储过程生返回的多结果类型依次配置导入

  <FunctionImport Name="<span style="font-family: Arial, Helvetica, sans-serif;">functionname</span>" >
            <ReturnType Type="Collection(<span style="font-family: Arial, Helvetica, sans-serif;">EFeModel</span>.School)"/>
            <ReturnType Type="Collection(<span style="font-family: Arial, Helvetica, sans-serif;">EFeModel</span>.Class)"/>
            <ReturnType Type="Collection(<span style="font-family: Arial, Helvetica, sans-serif;">EFeModel</span>.Student)"/>
            <Parameter Name="flag" Mode="In" Type="Int32" />
            <Parameter Name="name" Mode="In" Type="varchar" />
   </FunctionImport>

2、将ComplexType配置项增加相应的类型配置,如下

  <ComplexType Name="<span style="font-family: Arial, Helvetica, sans-serif;">School</span>">
          <Property Type="String" Name="name" Nullable="true" MaxLength="20" />
          <Property Type="Int32" Name="count" Nullable="true" />
          <Property Type="Decimal" Name="play" Nullable="true" Precision="38" Scale="2" />
        </ComplexType>
        <ComplexType Name="<span style="font-family: Arial, Helvetica, sans-serif;">Class</span>">
          <Property Type="String" Name="name" Nullable="true" MaxLength="20" />
          <Property Type="Int32" Name="count" Nullable="true" />
          <Property Type="Decimal" Name="play" Nullable="true" Precision="38" Scale="2" />
        </ComplexType>
        <ComplexType Name="<span style="font-family: Arial, Helvetica, sans-serif;">Student</span>">
          <Property Type="String" Name="name" Nullable="true" MaxLength="20" />
          <Property Type="Int32" Name="count" Nullable="true" />
          <Property Type="Decimal" Name="play" Nullable="true" Precision="38" Scale="2" />
        </ComplexType>


3、在结果集映射FunctionImportMapping中增加相应的返回结果类型映射,如下

   <ResultMapping>
              <ComplexTypeMapping TypeName="<span style="font-family: Arial, Helvetica, sans-serif;">EFeModel</span><span style="font-family: Arial, Helvetica, sans-serif;">.School</span>">
                <ScalarProperty Name="name" ColumnName="name" />
                <ScalarProperty Name="count" ColumnName="count" />
                <ScalarProperty Name="play" ColumnName="play" />
              </ComplexTypeMapping>
            </ResultMapping>
            <ResultMapping>
              <ComplexTypeMapping TypeName="<span style="font-family: Arial, Helvetica, sans-serif;">EFeModel</span><span style="font-family: Arial, Helvetica, sans-serif;">.Class</span>">
                <ScalarProperty Name="name" ColumnName="name" />
                <ScalarProperty Name="count" ColumnName="count" />
                <ScalarProperty Name="play" ColumnName="play" />
              </ComplexTypeMapping>
            </ResultMapping>
            <ResultMapping>
              <ComplexTypeMapping TypeName="<span style="font-family: Arial, Helvetica, sans-serif;">EFeModel</span><span style="font-family: Arial, Helvetica, sans-serif;">.Student</span><span style="font-family: Arial, Helvetica, sans-serif;">"></span>
                <ScalarProperty Name="name" ColumnName="name" />
                <ScalarProperty Name="count" ColumnName="count" />
                <ScalarProperty Name="paly" ColumnName="play" />
              </ComplexTypeMapping>
            </ResultMapping>


4、配置修改完毕,保存即可。那么接下来就看看在程序中如何获取这些多个返回结果

  //获取School
                var list = db.functionname(flag, name);
                model.School= list.Select(a => new School()
                {
                    Name = a.Name,
                    Play= a.Play,
                    Count = a.Count
                }).ToList();

                //获取Class
                var list1 = list.GetNextResult<functionname>();
                model.Class= list1.Select(a => new Class()
                {
                    Name = a.Name,
                  <span style="font-family: Arial, Helvetica, sans-serif;">Count= a.Count,</span><pre name="code" class="csharp">                    Play= a.Play
}).ToList(); //获取Student var list2 = list1.GetNextResult<functionname>(); model.Student= list2.Select(a => new Student() { Name = a.Name, Count= a.Count, Play= a.Play }).ToList();



到这里我们就基本完成了获取存储过程多返回结果的配置和使用了,根据返回结果的多少配置相应的返回结果类即可。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

EF中执行存储过程,获取output返回值

EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int titl...

EntityFramework存储过程的返回类型

使用EntityFramework可以很方便的与数据库打交道,但是对于存储过程,返回类型很让人纠结,默认只返回受影响的行数,而我们在使用存储过程时往往是会返回一串的数据或者一个表。那有没有什么方法呢?...

如果存储过程返回多个结果集,怎么取结果

//方式一:使用SqlDataAdapter SqlDataAdapter sda = new SqlDataAdapter(); DataSet ds...

EF 多表查询的方法

EF实体类 entity = new EF实体类(); var query = (from u in entityt.用户表 join b in entity.权限表 on u.用户权限Id equ...

如何用JAVA获取SQL SERVER存储过程返回的多个结果集

[code="sql"] ------------------------------ create table person ( pid int identity primary key, name nvarchar(30) not null, age int default 0, city nvarchar(30) ) go insert into person values('x7700',20,'NJ') insert into person values('x7711',21,'SH') insert into person values('x77
  • x7700
  • x7700
  • 2010-02-25 21:25
  • 971

Mysql存储过程——多结果集返回与java获取

存储过程经常需要返回多个结果集。 Mysql 中直接用 select 即可返回结果集。而 oracle 则需要使用游标来返回结 果 集。这一点 Mysql 相对比较方便,如下代码即可实现输出两个结果集...

MyBatis调用存储过程返回多结果集(转)

<a href="http:

sql存储过程——多结果集返回与java获取

Mysql存储过程——多结果集返回与java获取 delimiter $$ CREATE PROCEDURE demoSp(IN inputParam ...

Mysql存储过程——多结果集返回与java获取

Mysql存储过程——多结果集返回与java获取 delimiter $$ CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), INOUTinOutParam v
  • soboer
  • soboer
  • 2011-11-18 13:10
  • 4193

Mysql存储过程——多结果集返回与java获取

Mysql存储过程——多结果集返回与java获取 delimiter $$ CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), ...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)