Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有多个结果集的Entity Framework 5存储过程_C#_Entity Framework_Asp.net Mvc 4_Entity Framework 5 - Fatal编程技术网

C# 具有多个结果集的Entity Framework 5存储过程

C# 具有多个结果集的Entity Framework 5存储过程,c#,entity-framework,asp.net-mvc-4,entity-framework-5,C#,Entity Framework,Asp.net Mvc 4,Entity Framework 5,我目前正在使用asp.net mvc 4.5和EF5 Beta 2进行编码,并且我有一个返回多个结果集的存储过程。我发现,它说(我正在使用的)新版本已经支持多个结果集 现在我似乎找不到那种支持。由于我对EF完全是新手,我希望我没有做错什么 对于创建的结果集,我的数据库中没有相应的实体。这是一个非常有趣的问题。我使用.NET 4.5 Beta/VS11 Beta玩了一段时间,我有两个观察结果: 设计器中似乎不支持多个结果集—所有内容都必须在以XML形式打开的EDMX中手动映射 前一篇关于2011

我目前正在使用asp.net mvc 4.5和EF5 Beta 2进行编码,并且我有一个返回多个结果集的存储过程。我发现,它说(我正在使用的)新版本已经支持多个结果集

现在我似乎找不到那种支持。由于我对EF完全是新手,我希望我没有做错什么


对于创建的结果集,我的数据库中没有相应的实体。

这是一个非常有趣的问题。我使用.NET 4.5 Beta/VS11 Beta玩了一段时间,我有两个观察结果:

  • 设计器中似乎不支持多个结果集—所有内容都必须在以XML形式打开的EDMX中手动映射
  • 前一篇关于2011年6月CTP的文章似乎不再有效,因为MSL不允许声明多个
    ResultMapping
    来映射不同的结果集,并且每个
    ResultMapping
    只能映射单个结果集
编辑:


我错了。它在运行时工作。只有设计者抱怨EDMX验证,但MSL本身接受多个
ResultMapping
元素。问题中链接的原始演练仍然有效。

核心EF库支持多结果集过程。不幸的是,设计者没有——而且还不清楚它是否会在发布时发布

我也发现文档有点稀疏,特别是对于返回多个实体类型(与复杂类型相反)。幸运的是,手动编辑EDMX并不太复杂。我写了一篇关于……主题的博客文章

(请注意,我的服务器可能需要几分钟的时间来启动磁盘,因为没有太多人访问我简陋的小博客)

短的部分在CSDL部分

<edmx:ConceptualModels>
  <Schema Namespace="myModel" ...>
    <EntityContainer Name="myModelEntities" ....>
    ......
    <!-- 
     this is what “function import” wrote, that I’m overwriting…         
     FunctionImport Name="MyMARS_Proc" ReturnType="Collection(myModel.Table_A)"/>
     -->
     <FunctionImport Name="MyMARS_Proc" >
        <ReturnType Type="Collection(myModel.Table_A)" EntitySet="Table_As"/>
        <ReturnType Type="Collection(myModel.Table_B)" EntitySet="Table_Bs"/>
     </FunctionImport> 

......
然后在MSL(C-S映射部分)中,您将需要

<edmx:Mappings>
  <Mapping Space="C-S" ....>
    <EntityContainerMapping  ....>

       <FunctionImportMapping FunctionImportName="MyMARS_Proc"
                               FunctionName="myModel.Store.MyMARS_Proc">
            <ResultMapping>
                <EntityTypeMapping  TypeName="myModel.Table_A"/>
            </ResultMapping>
            <ResultMapping>
                <EntityTypeMapping TypeName="myModel.Table_B"/>
            </ResultMapping>
       </FunctionImportMapping>

我做了这个代码

程序如下

           alter procedure dbo.proc_getmorethanonetable

          as
       select * from dbo.Orders
      select * from dbo.Items
     select * 
      from dbo.Users u
      inner join dbo.Orders o 
        on o.User_ID = u.User_ID
  go
代码非常简单 我们开始

        using (var db = new EF_DEMOEntities())
              {
                   var cmd = db.Database.Connection.CreateCommand();
                    cmd.CommandText = "[dbo].[proc_getmorethanonetable]";
                     try
                       {
                            db.Database.Connection.Open();
                            using (var reader = cmd.ExecuteReader())
                           {
                                 var orders =            
                                 ((IObjectContextAdapter)db).ObjectContext.Translate<Order>(reader);
                                 GridView1.DataSource = orders.ToList();
                                 GridView1.DataBind();
                                 reader.NextResult();
                                var items =  
                           ((IObjectContextAdapter)db).ObjectContext.Translate<Item>(reader);
                              GridView2.DataSource = items.ToList();
                              GridView2.DataBind();


                            }
                        }
                       finally
                       {
                            db.Database.Connection.Close();
                       }
                       }
使用(var db=new EF_DEMOEntities())
{
var cmd=db.Database.Connection.CreateCommand();
cmd.CommandText=“[dbo].[proc_getmorethanetable]”;
尝试
{
db.Database.Connection.Open();
使用(var reader=cmd.ExecuteReader())
{
风险值订单=
((IObjectContextAdapter)db.ObjectContext.Translate(读取器);
GridView1.DataSource=orders.ToList();
GridView1.DataBind();
reader.NextResult();
可变项目=
((IObjectContextAdapter)db.ObjectContext.Translate(读取器);
GridView2.DataSource=items.ToList();
GridView2.DataBind();
}
}
最后
{
db.Database.Connection.Close();
}
}

这就是你要说的:)

你是先使用代码还是先使用数据库(EDMX)?哎呀,好像我忘了包括这一点;我首先使用数据库(.edmx),它仍然被称为新功能…感谢您的回复,但这并不是真正的EF。这只是使用模型的旧方法,但仍然有大量代码。