(Из примера в новой книге Entity Framework Джулии Лерман.) У меня есть база данных с двумя таблицами: Contact и Address. В таблице контактов есть ContactID (int), а также имя, фамилия и т. Д. В таблице адресов есть ContactID, а также город, штат, почтовый индекс и т. Д.
Вот простой запрос LINQ:
var addressGraphQuery = from a in context.Addresses.Include("Contact")
orderby a.Contact.LastName, a.Contact.FirstName
select a;
В SQL Profiler я вижу следующее:
SELECT
[Extent1].[addressID] AS [addressID],
[Extent1].[City] AS [City],
[Extent1].[StateProvince] AS [StateProvince],
-- etc
[Extent3].[ContactID] AS [ContactID1],
[Extent3].[FirstName] AS [FirstName],
[Extent3].[LastName] AS [LastName],
-- etc
FROM [dbo].[Address] AS [Extent1]
INNER JOIN [dbo].[Contact] AS [Extent2] ON [Extent1].[ContactID] = [Extent2].[ContactID]
LEFT OUTER JOIN [dbo].[Contact] AS [Extent3] ON [Extent1].[ContactID] = [Extent3].[ContactID]
ORDER BY [Extent2].[LastName] ASC, [Extent3].[FirstName] ASC
Он дважды присоединяется к таблице контактов! Почему? Есть ли простой способ предотвратить это?
Тайна становится все глубже. Объединения исчезают, когда я удаляю заказы. Соединения не исчезают, когда я устанавливаю context.ContextOptions.LazyLoadingEnabled = false
.
Здесь также есть аналогичный вопрос:
Too Many Left Outer Joins in Entity Framework 4?
I посмотрю, есть ли Высшая Сила, я могу спросить ...