实体框架4 - 如何从存储过程中读取多个记录集?

时间:2010-08-30 04:52:38

标签: c# .net stored-procedures entity-framework-4 poco

我有一个非常简单的存储过程,它返回多个记录集。所有记录集都有别名列,所以它们看起来都一样。

E.g。

    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(无代码生成)。

现在,我使用详细here的技术创建了“功能导入”。

但问题是,它正在创建一个包含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,Name)。

我认为问题肯定在于“功能导入”的自定义。我该如何创建复杂类型?或者我应该使用“返回实体集合”。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

我认为开箱即用不支持多个resut集。 Here是关于在EF v1中使用它们的博客文章。 EF v4也不直接支持它们 - 这个article中的注释包含Danny Simmons的以下声明(他曾经是EF和Linq-To-Sql的开发经理):

  

不幸的是我们无法得到   完全支持多个结果   这次的产品。我们做到了,   但是,添加方法Translate   到允许你的ObjectContext   从DataReader中实现对象。   ...

编辑:为了使这一点更新:EF 4.5(.NET 4.5 + VS2012)supports stored procedures with multiple result sets但至少在Beta中看起来支持没有在UI中实现,EDMX验证也抱怨一些问题,但在运行时它正常工作。