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

C# 实体框架4-如何从存储过程中读取多个记录集?,c#,.net,stored-procedures,entity-framework-4,poco,C#,.net,Stored Procedures,Entity Framework 4,Poco,我有一个非常简单的存储过程,它返回多个记录集。所有记录集都有别名列,因此它们看起来都一样 例如 对于我的EF设置,我使用POCOs,并拥有自己的DataContext(无代码生成) 现在,我使用详细介绍的技术创建了一个“函数导入” 但问题是,它创建的是一个具有Id和Name的复杂类型,而不是一个可以容纳多个Id和Name集合的类型。EF无法检测到我返回多个记录集吗 因此,存储的过程可以正确执行,但返回的记录只有第一条select语句中的记录,其他记录将被丢弃。所以我只找回了10张唱片 下面是我如

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

例如

对于我的EF设置,我使用POCOs,并拥有自己的DataContext(无代码生成)

现在,我使用详细介绍的技术创建了一个“函数导入”

但问题是,它创建的是一个具有Id和Name的复杂类型,而不是一个可以容纳多个Id和Name集合的类型。EF无法检测到我返回多个记录集吗

因此,存储的过程可以正确执行,但返回的记录只有第一条select语句中的记录,其他记录将被丢弃。所以我只找回了10张唱片

下面是我如何在自定义数据上下文中执行存储过程:

public ObjectResult<SomeSimpleProc_Result> GetSomeStuff()
    {
        return base.ExecuteFunction<SomeSimpleProc_Result>("SomeSimpleProc);
    }
最终的结果是我想要一个包含0-*个对象的对象(在上面的例子中是3个对象)。每个对象中都应该有一组简单对象(Id、名称)

我认为问题肯定出在“函数导入”的定制上。我应该如何创建复杂类型?或者我应该使用“返回实体集合”


有什么想法吗?

我认为开箱即用不支持多个结果集。是一篇关于在EFV1中使用它们的博客文章。EFV4也不直接支持它们——本文中的注释包含Danny Simmons的以下语句(他曾是EF和Linq to Sql的开发经理):

不幸的是,我们没能得到 完全支持将多个结果转换为 这一次的产品。我们做到了, 但是,请添加方法Translate 到ObjectContext,它允许您 从数据读取器具体化对象。


编辑:为了使这一点变得最新:EF 4.5(.NET 4.5+VS2012),但至少在测试版中,它看起来没有在UI中实现支持,EDMX验证也抱怨了一些问题,但在运行时它工作正常。

Ah-Ha!很好的发现。好的,看来我们必须回到一些“经典”ADO.NET来获得结果集。该死。使用单个事务更新多个记录也存在相同的问题(必须使用SqlCommand)。哦,好吧,至少我们知道。谢谢
public ObjectResult<SomeSimpleProc_Result> GetSomeStuff()
    {
        return base.ExecuteFunction<SomeSimpleProc_Result>("SomeSimpleProc);
    }
public class SomeSimpleProc_Result
    {
        #region Primitive Properties

        public int Id
        {
            get;
            set;
        }

        public string Name
        {
            get;
            set;
        }

        #endregion
    }