如何为存储过程中作为临时表返回的结果集创建复杂类型?

时间:2013-01-26 06:21:09

标签: asp.net-mvc-3 edmx

如何获取临时表的列,其中包含从实体框架函数导入中的存储过程返回的多个表列?

感谢

2 个答案:

答案 0 :(得分:0)

第一步:

首先,您必须创建一个正常的存储过程,而不使用临时表。此存储过程将包含所有列名称(普通表+临时表)。现在,您可以在 EDMX

中创建复杂类型

第二步:

现在您将修改您的商店程序,因为您确实想要使用临时表 来编写

第三步:

更新 EDMX 模型

答案 1 :(得分:0)

您必须向sql server提供数据协定,以便实体框架可以使用它来生成复杂对象。因此我们将使用虚拟选择语句来提供合同。 select语句将无法访问,因此代码块不会降低性能。

现在让我们看一个例子:

ALTER PROCEDURE [dbo].[Dummy_SP_Complex_Object_For_Temp_Table]   
AS
BEGIN

      IF 1 = 2 BEGIN
       SELECT
       cast(null as int)  as WeekNumber,
       cast(null as date)    as FilterStartDate,
       cast(null as date)    as FilterEndDate,
       cast(null as int)    as OrderNumber
        WHERE 1 = 2  
      END

  IF OBJECT_ID('tempdb.dbo.#T', '#OrderShipments') IS NOT NULL
  DROP TABLE #T; 
  Create Table #OrderShipments
  (
    WeekNumber int,
    FilterStartDate date,
    FilterEndDate date,
    OrderNumber int
  )
  Select WeekNumber, FilterStartDate, FilterEndDate, OrderNumber FROM #OrderShipments order by WeekNumber
END

实体框架无法访问第一个代码块,但它为EF提供了创建复杂类型对象的必要信息。