Итак, у меня есть разработанная мной схема, в которой есть таблица, которая действует как таблица соединений для нескольких объектов. Это с целью пометки. У меня есть объекты, использующие GUID, и затем я могу централизовать тегирование.
В этом случае на диаграмме я связываю TeamMember через TeamMemberGUID в настройке «многие ко многим» через таблицу соединений ObjectTag, а именно в поле ObjectGUID. Я мог бы так же легко связать любую другую сущность с GUID-ключом таким же образом. Таким образом, у меня есть центральный репо тегов, которые могут «помечать» различные объекты. Довольно гладко, или я так подумал .
Беда в том, что я не могу найти способ вернуть эти данные с помощью LINQ to Entities. Я использую EF Code First и хочу вернуть это в один запрос, если это возможно. Самое близкое, что я получил, это использование уродливого синтаксиса внешнего соединения:
var team = from tm in db.TeamMembers
join ot in db.ObjectTags on tm.TeamMemberGuid equals ot.ObjectGuid into objTags // outer join to ObjectTag
from ot2 in objTags.DefaultIfEmpty()
join tags in db.Tags on ot2.TagId equals tags.TagId into tmTags // join via ObjectTag to Tag
select new TeamMemberDTO
{
TeamMember = tm,
Tags = tmTags
};
Но это дает мне плоский набор (4 члена команды, разделяющие 2 тега, могут равняться 8 результатам), где я ищу иерархический объект TeamMember со свойством Tags связанных тегов.
Я пробовал нормальные свойства отношений, но EF не хочет отображать более одной сущности в соединительную таблицу, так что это не так. Я также попробовал группу, но не продвинулся далеко с этим.
Это для LINQ to EF? Нужно ли рассматривать вид или что-то?
Действительно надеюсь, что профессионал EF поможет мне в этом. Я чувствую, что что-то упустил или неправильно выбрал подход.