簡體   English   中英

具有多個結果集的實體框架5存儲過程

[英]Entity Framework 5 stored procedure with multiple result sets

我目前正在使用asp.net mvc 4.5和EF5 Beta 2進行編碼,我有一個存儲過程,它返回多個結果集。 我找到了這個網站 ,它說新版本(我正在使用)已經支持多個結果集。

現在我似乎無法找到那種支持。 由於我完全不熟悉EF,我希望我沒有做錯事。

我的數據庫中沒有相應的實體來創建結果集。

核心EF庫支持多結果集過程。 不幸的是,設計師沒有 - 並且不清楚它是否會在發布時出現。

我也發現文檔有點稀疏,特別是對於返回多個實體類型(而不是復雜類型)。 幸運的是,手動編輯EDMX並不太復雜。 我寫了一篇關於主題的博客文章....

實體框架5 - 來自存儲過程的多個實體類型的結果集注意,我的服務器可能需要幾分鍾才能啟動磁盤,因為沒有太多的人在我的簡陋小博客上流動 )。

缺點是在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(CS Mapping部分)你會想要......

<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>

這是一個非常有趣的問題。 我玩了.NET 4.5 Beta / VS11 Beta一段時間,我有兩個觀察結果:

  • 看起來設計人員不支持多個結果集 - 所有內容都必須在以XML格式打開的EDMX中手動映射
  • 看起來有關June CTP 2011的前一篇文章不再有效,因為MSL不允許聲明多個ResultMapping來映射不同的結果集,並且每個ResultMapping只能映射單個結果集

編輯:

我錯了。 它在運行時工作。 只有設計師抱怨EDMX驗證,但MSL本身接受多個ResultMapping元素。 問題中鏈接的原始演練仍然有效。

我做了這個代碼

程序如下

           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();
                       }
                       }

在這里你去:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM