Как правильно объединить 3 таблицы, используя EF? - PullRequest
1 голос
/ 30 апреля 2011

Это может быть потому, что немного рано утром, и мозг не функционирует правильно, но у меня есть вопрос, касающийся структуры сущностей и SQL

Допустим, у меня есть 2 таблицы

Consumer ConsumerID Имя MembershipNumberID

MembershipEntry MembershipEntryID EntryDate MembershipNumberID

Участник может иметь MembershipNumberID до того, как он имеет идентификатор потребителя.Подумайте, как человек собирает номер участника и использует его в первый раз, прежде чем связать его с consumerID.

Я хочу присоединиться к таблицам, чтобы создать запрос, который возвращает всезаписи о членстве, даже если с ними еще не связан потребитель.

Я попытался добавить FK в таблицу MembershipEntry, однако это не удалось, как и следовало ожидать из-за отсутствия идентификаторов в таблице членства.

Должен ли я просто создать третью таблицу с именем MembershipEntries и иметь 2 поля FK?

Я могу создать базовое объединение, используя что-то вроде

from item in ctx.MembershipEntry
     join c in ctx.Consumer on item.MembershipNumberID  equals c.MembershipNumberID
     select new MembershipViewModel()
     {
     .....................
     }

Как я могу завершить левое внешнее объединение, используя EF4, чтобы включить все записи, даже если у них нет номера участника, который связан сих

Ответы [ 2 ]

2 голосов
/ 01 мая 2011

В LINQ to SQL это будет выглядеть следующим образом.

from item in ctx.MembershipEntry
join c in ctx.Consumer on 
    item.MembershipNumberID equals c.MembershipNumberID into customers
from c in customers.DefaultIfEmtpy()
select new MembershipViewModel()
{
    ...
}

Надеюсь, это будет работать и для EF.

1 голос
/ 30 апреля 2011

Вам не нужна третья таблица, чтобы объединить эти две таблицы данных (вот почему это реляционная база данных !! WOOHOO!).Весь смысл в том, чтобы облегчить связь и извлечение данных.Все, что вам нужно, это простой оператор SQL!

Например:

SELECT * 
FROM MembershipEntry 
LEFT OUTER JOIN Consumer on Consumer.MembershipNumberID = MembershipEntry.MembershipNumberID

LEFT OUTER JOIN говорит: «Дайте мне все из таблицы MembershipEntry, даже если в Consumer нет ничего, что соответствовало бы ему»таблица "

См. http://www.w3schools.com/sql/sql_join_left.asp для получения дополнительной информации и примеров!

ПРИМЕЧАНИЕ. Некоторые базы данных могут использовать только LEFT JOIN, но SQL использует LEFT OUTER JOIN

...