2013-04-12 2 views
5

Я пытаюсь внешнее соединение таблицы с значной функции инлайн таблицы в моем запросе LINQ, но я получаю ошибку компиляции запроса во время выполнения:Entity Framework 5: Как внешнее соединение Таблица Ценится Функция

" Запрос попытался вызвать «OuterApply» по вложенному запросу, но «OuterApply» не имел соответствующих ключей ».

Мой LINQ заявление выглядит следующим образом:

 var testQuery = (from accountBase in ViewContext.AccountBases 

         join advisorConcatRaw in ViewContext.UFN_AccountAdvisorsConcatenated_Get() 
           on accountBase.AccountId equals advisorConcatRaw.AccountId into advisorConcatOuter 
         from advisorConcat in advisorConcatOuter.DefaultIfEmpty() 

         select new 
         { 
          accountBase.AccountId, 
          advisorConcat.Advisors 
         }).ToList(); 

Определение функции выглядит следующим образом:

CREATE FUNCTION dbo.UFN_AccountAdvisorsConcatenated_Get() 
RETURNS TABLE 
AS 
RETURN 
    SELECT AP.AccountId, 
      LEFT(AP.Advisors, LEN(AP.Advisors) - 1) AS Advisors 
     FROM ( SELECT DISTINCT 
         AP.AccountId, 
         ( SELECT AP2.PropertyValue + ', ' 
          FROM dbo.AccountProperty AP2 WITH (NOLOCK) 
          WHERE AP2.AccountId = AP.AccountId 
          AND  AP2.AccountPropertyTypeId = 1 -- Advisor 
          FOR XML PATH('')) AS Advisors 
       FROM dbo.AccountProperty AP WITH (NOLOCK)) AP; 

Я могу успешно выполнить объединение непосредственно в SQL следующим образом:

SELECT ab.accountid, 
     advisorConcat.Advisors 
FROM accountbase ab 
     LEFT OUTER JOIN dbo.Ufn_accountadvisorsconcatenated_get() advisorConcat 
        ON ab.accountid = advisorConcat.accountid 

У кого-нибудь есть рабочий пример левого внешнего соединения встроенного TVF в таблицу в LINQ для сущностей - или это известный дефект и т. Д.? Большое спасибо.

+0

Имейте такую ​​же проблему, любое решение? –

+0

По-прежнему не реагирует на это от Microsoft - будет ли эта проблема исправлена ​​в следующей версии EF? –

ответ

1

Entity Framework должен знать, каковы первичные ключевые столбцы результатов TVF, чтобы сделать левое соединение. В основном вам нужно создать поддельную таблицу с той же схемой, что и ваши результаты TVF, и обновить TVF в браузере моделей, чтобы вернуть новый тип созданной таблицы, а не стандартный тип. Вы можете обратиться к this answer, чтобы получить более подробную информацию.

Смежные вопросы