簡體   English   中英

實體框架4-如何從存儲過程中讀取多個記錄集?

[英]Entity Framework 4 - How to Read Multiple Record Sets From A Stored Procedure?

我有一個非常簡單的存儲過程,該過程返回多個記錄集。 所有記錄集都有別名列,因此它們看起來都一樣。

例如

    SELECT TOP 10 FooId AS Id, Name As Name FROM Foos
    SELECT TOP 10 BarId AS Id, Name As Name FROM Bars
         ...

對於我的EF設置,我使用的是POCO,並且有自己的DataContext(沒有代碼生成)。

現在,我使用此處詳細介紹的技術創建了一個“函數導入”。

但是問題是,它正在使用Id和Name創建一個復雜的類型,而不是可以容納Id和Name的多個集合的類型。 EF無法檢測到我要返回多個記錄集嗎?

因此,存儲的proc可以正確執行,但是返回的唯一記錄來自第一個select語句,其他記錄則被丟棄。 所以我只拿回10條記錄。

這是我在自定義DataContext中執行SPROC的方式:

public ObjectResult<SomeSimpleProc_Result> GetSomeStuff()
    {
        return base.ExecuteFunction<SomeSimpleProc_Result>("SomeSimpleProc);
    }

以及返回結果POCO:

public class SomeSimpleProc_Result
    {
        #region Primitive Properties

        public int Id
        {
            get;
            set;
        }

        public string Name
        {
            get;
            set;
        }

        #endregion
    }

最終結果是我想要一個包含0- *個對象的對象(在上述情況下為3個對象)。 每個對象中應具有一組簡單對象(Id,名稱)。

我認為問題肯定與“功能導入”的定制有關。 我應該如何創建復雜類型? 還是我應該使用“返回實體集合”。

有任何想法嗎?

我認為開箱即用不支持多個結果集。 是有關在EF v1中使用它們的博客文章。 EF v4也不直接支持它們- 本文中的評論包含Danny Simmons(他曾經是EF和Linq-To-Sql的開發經理)的以下聲明:

不幸的是,這次我們無法獲得對產品多個結果的全面支持。 但是,我們確實添加了Translate to ObjectContext方法,該方法使您可以從DataReader實現對象。 ...

編輯:為了使這一點點更新:EF 4.5(.NET 4.5 + VS2012) 支持具有多個結果集的存儲過程,但至少在Beta中,它似乎未在UI和EDMX驗證中實現,並且還抱怨一些問題但在運行時它可以正常工作。

暫無
暫無

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

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