EntityFramework 6:具有多个结果集的ExecuteStoreQueryAsync

时间:2013-09-04 22:00:05

标签: entity-framework

我正在使用EF 6 beta1。我有一个简单的存储过程,返回两个结果集:

  

ALTER PROCEDURE GetItemsByParentId

     

@parentID int

     

SELECT * FROM Table1 WHERE ParentID = @parentID

     

SELECT * FROM Table2 WHERE ParentID = @parentID

我想使用我的ObjectContext调用该存储过程。我首先使用数据库而且我有一个edmx,但如果我不需要,我不想将存储过程作为函数导入。

我创建了两个简单的类Table1DTO和Table2DTO来存储存储过程的结果。对于第一个结果集,我称之为:

  

var result1 = ExecuteStoreQueryAsync< Table1DTO>(“EXEC GetItemsByParentId @parentID”,新的SqlParameter(“parentID”,parentID));

     

列出table1DTOList = result1.ToList();

工作正常。然后对于第二个结果集,我正在尝试这个:

  

var result2 = result.GetNextResult<表2DTO>();

     

list improvementDetailInfos = result2.ToList();

问题是result2返回null。我错过了什么?

1 个答案:

答案 0 :(得分:0)

这可能听起来像分裂头发,但实体框架支持多个结果集。问题是实体框架工具不。这是EF 4.1 / 4.2以来的一个问题。所以你有三个选择(我能想到):

  1. 将您的通话分成仅使用单个结果集
  2. 对需要多个结果集的少数关键存储过程使用替代技术(dapper?)
  3. 手动编辑EDMX以创建GetItemsByParentId
  4. 的多结果集映射

    说实话,我已经在很多场景中与之搏斗,但没有一个选项很棒。如果你是受虐狂的话,我wrote up an exampleanswered a question就如何为多个结果集编辑EDMX。