LINQ to Entities, присоединяющиеся к экземпляру, а не id, генерирует неприятный SQL

Может ли кто-нибудь объяснить, почему соединение по сущности, а не по идентификатору, генерирует действительно некрасивый sql, когда на самом деле концептуально он делает то, что вы думаете, было то же самое? например,

По идентификатору

from companyDirector in CompanyDirectors
join contactAddress in ContactAddresses
  on companyDirector.ContactAddress.Id equals contactAddress.Id
select new {companyDirector, contactAddress}

Генерирует

FROM  [COMPANY] AS [Extent1]
    INNER JOIN [ADDRESS] AS [Extent2] ON [Extent1].[CONTACT_ADDRESS_ID] = [Extent2].[CONTACT_ADDRESS_ID]

По экземпляру

from companyDirector in CompanyDirectors
join contactAddress in ContactAddresses
  on companyDirector.ContactAddress equals contactAddress
select new {companyDirector, contactAddress}

генерирует

FROM  [COMPANY] AS [Extent1]
INNER JOIN [ADDRESS] AS [Extent2] ON  EXISTS (SELECT 
    1 AS [C1]
    FROM    ( SELECT 1 AS X ) AS [SingleRowTable1]
    LEFT OUTER JOIN  (SELECT 
        [Extent3].[CONTACT_ADDRESS_ID] AS [CONTACT_ADDRESS_ID]
        FROM [ADDRESS] AS [Extent3]
        WHERE [Extent1].[CONTACT_ADDRESS_ID] = [Extent3].[CONTACT_ADDRESS_ID] ) AS [Project1] ON 1 = 1
    LEFT OUTER JOIN  (SELECT 
        [Extent4].[CONTACT_ADDRESS_ID] AS [CONTACT_ADDRESS_ID]
        FROM [ADDRESS] AS [Extent4]
        WHERE [Extent1].[CONTACT_ADDRESS_ID] = [Extent4].[CONTACT_ADDRESS_ID] ) AS [Project2] ON 1 = 1
    WHERE [Project1].[CONTACT_ADDRESS_ID] = [Extent2].[CONTACT_ADDRESS_ID]
)

Это кажется мне довольно неэффективным, заставляя вас использовать маршрут id. Я ...

Моя текущая цель - добавить новый атрибут клиента (с типом int ), который должен отображаться как выбор с предопределенными параметрами (загружается из модели с записями, редактируемыми в бэкэнде, которые сделано). Я борюсь с правильным использованием метода $ installer-> addAttribute () , особенно с указанием правильной опции источника. Другая проблема заключается в том, что новый атрибут не сохраняется в таблице eav_entity_attribute

Я использую Magento CE 1.5.1.0

37
задан Jonathan Day 11 May 2011 в 09:45
поделиться