【问题标题】:Entity Framework 4 - How to Read Multiple Record Sets From A Stored Procedure?Entity Framework 4 - 如何从存储过程中读取多个记录集?
【发布时间】:2010-08-30 04:52:37
【问题描述】:

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

例如

    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 不能检测到我正在返回多个记录集吗?

所以存储过程被正确执行,但返回的唯一记录来自第一个 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)。

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    我认为开箱即用不支持多个结果集。 Here 是一篇关于在 EF v1 中使用它们的博文。 EF v4 也不直接支持它们——article 中的 cmets 包含 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 验证也抱怨一些问题但是在运行时它工作正常。

    【讨论】:

    • 啊哈!很好的发现。好的,看起来我们必须恢复到一些“经典”ADO.NET 才能获得结果集。当。使用单个事务更新多个记录的问题相同(必须使用 SqlCommand)。哦,好吧,至少我们知道。谢谢。
    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2014-04-23
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多