Entity Framework код первого внешнего соединения для интересной схемы - PullRequest
1 голос
/ 20 июля 2011

Итак, у меня есть разработанная мной схема, в которой есть таблица, которая действует как таблица соединений для нескольких объектов. Это с целью пометки. У меня есть объекты, использующие GUID, и затем я могу централизовать тегирование.

enter image description here

В этом случае на диаграмме я связываю 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 поможет мне в этом. Я чувствую, что что-то упустил или неправильно выбрал подход.

...