Внимание!использование DefiningQuerys может быть ОЧЕНЬ МЕДЛЕННЫМ!
Вот пример:
Если это определяющий запрос, для которого вы создаете сущность:
Select
C.CustomerID,
C.FirstName,
C.LastName,
G.SalesCatetory
From
CustomerDatabase.dbo.Customers C
Inner Join MarketingDatabase.dbo.CustomerCategories G on G.CustomerID = C.CustomerID
Тогда, когда вы делаетепри выборе Entity по CustomerID трассировка SQL выглядит примерно так:
Select
[Extent1].[CustomerID] as [CustomerID],
[Extent1].[FirstName] as [FirstName],
[Extent1].[LastName] as [LastName],
[Extent1].[SalesCatetory] as [SalesCatetory]
From (
Select
C.CustomerID,
C.FirstName,
C.LastName,
G.SalesCatetory
From
CustomerDatabase.dbo.Customers C
Inner Join MarketingDatabase.dbo.CustomerCategories G on G.CustomerID = C.CustomerID
) as [Extent1]
Where '123456' = [Extent1].[CustomerID]
SQL Server может выполнить этот запрос очень медленно.У меня был один случай, немного более сложный, чем в приведенном выше примере, где я попробовал текст DefiningQuery непосредственно в окне запроса консоли управления SQl Server, добавив предложение where для значения, для которого я хотел выбрать.Это работает менее чем за секунду.Затем я захватил трассировку SQL от выбора того же значения из сущности, созданной для этого DefiningQuery, и запустил запрос трассировки SQL в окне запроса SQL Server - это заняло 13 секунд!
Так что я думаю, что только реальный путьсделать кросс-запросы к базе данных - это создать вид на сервере.