Я использую EF 6.1.2-beta1
код первой в моей программе и имеют следующие модели в моем проекте (моя база данных создается самим EF
, тоже):EF не дают ожидаемого SQL
public class Document
{
public int Id { get; set; }
public AppUser Creator { get; set; }
public AppUser Modifier { get; set; }
}
public class AppUser
{
public int Id { get; set; }
public string UserId { get; set; }
public Party Party { get; set; }
}
public class Party
{
public int Id { get; set; }
public string Name { get; set; }
}
I хотите написать запрос linq к объектам, чтобы найти Creator.Name
и Modifier.Name
из первых Document
(для простоты я предположил, что хочу найти первый Document
). Так что я написал следующий код:
var result = context.Documents.Select(d =>
new{
d.Id,
CreatorName = d.Creator.Party.Name,
ModifierName = d.Modifier.Party.Name,
}).FirstOrDefault();
EF
генерировать следующие SQL
для вышеупомянутого запроса:
SELECT TOP (1)
[Extent1].[Id] AS [Id],
[Extent3].[Name] AS [Name]
FROM [dbo].[Documents] AS [Extent1]
LEFT OUTER JOIN [dbo].[AppUser] AS [Extent2]
ON [Extent1].[Creator_Id] = [Extent2].[AppUserId]
LEFT OUTER JOIN [dbo].[Parties] AS [Extent3]
ON [Extent2].[Party_Id] = [Extent3].[Id]
Но, как вы видите, выше SQL
только один присоединиться к Party
таблице и поэтому получают только Creator.Name
.
[Обновлено]
Вы можете получить мой тест исходный код проекта от here
Dos Кто-нибудь знает, где проблема?
Спасибо, как вы сказали, это была ошибка в 'EF 6.1.2 beta', которая описана в https://entityframework.codeplex.com/workitem/2548, она исправлена в ночной сборке. обновите свой ответ. – Masoud