Хранимая процедура с запросом с использованием объединения и временных таблиц в Entity Framework

У меня есть хранимая процедура, которая использует временные таблицы и объединение для запроса базы данных:

ALTER PROCEDURE q_GetAllAttributesAndValuesByDocument(@IdDocument BIGINT)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT  
       AT.IDATRIBUTO,
       AT.NOMBREATRIBUTO,
       AD.VALORATRIBUTO
    INTO
       #TMP_ATTR
    FROM    
       ATRIBUTOS AT
    INNER JOIN 
       ATRIBUTOSXDOCUMENTO AD ON AT.IDATRIBUTO = AD.IDATRIBUTO
    WHERE 
       AD.IDDOCUMENTO2 = @IdDocument

    SELECT  
       TA.IDATRIBUTO AS Id,
       TA.NOMBREATRIBUTO AS Name,
       TA.VALORATRIBUTO AS Value
    FROM
       #TMP_ATTR TA

    UNION 

    SELECT  
       AT.IDATRIBUTO AS Id,
       AT.NOMBREATRIBUTO AS Name,
       '' AS Value
    FROM    
       ATRIBUTOS AT
    WHERE 
       IDATRIBUTO NOT IN (SELECT TA.IDATRIBUTO
                          FROM #TMP_ATTR TA)
END 

Когда я добавляю эту хранимую процедуру в свою модель Entity Framework, сложный тип не создается, EF просто возвращает целое число из хранимой процедуры.

Что я могу сделать?

Спасибо


person CHIRINGUCHI    schedule 20.08.2014    source источник
comment
Какой сложный тип вы ожидаете?   -  person Andrew    schedule 20.08.2014


Ответы (1)


Попробуйте использовать CTE вместо временной таблицы.

ALTER PROCEDURE q_GetAllAttributesAndValuesByDocument(@IdDocument BIGINT)
AS
BEGIN
    SET NOCOUNT ON;

    WITH TMP_ATTR (Id, Name, Value)
    AS
    (
        SELECT  
           AT.IDATRIBUTO,
           AT.NOMBREATRIBUTO,
           AD.VALORATRIBUTO
        FROM    
           ATRIBUTOS AT
        INNER JOIN 
           ATRIBUTOSXDOCUMENTO AD ON AT.IDATRIBUTO = AD.IDATRIBUTO
        WHERE 
           AD.IDDOCUMENTO2 = @IdDocument
    )

    SELECT  
       TA.IDATRIBUTO AS Id,
       TA.NOMBREATRIBUTO AS Name,
       TA.VALORATRIBUTO AS Value
    FROM
       TMP_ATTR TA

    UNION 

    SELECT  
       AT.IDATRIBUTO AS Id,
       AT.NOMBREATRIBUTO AS Name,
       '' AS Value
    FROM    
       ATRIBUTOS AT
    WHERE 
       IDATRIBUTO NOT IN (SELECT TA.IDATRIBUTO
                          FROM TMP_ATTR TA)

Затем обновите модель из базы данных.

person Yuliam Chandra    schedule 20.08.2014