В базе данных у меня есть таблицы Reservations
и OldReservations
, где OldReservations является копией (таблицы Reservations
) и используется для хранения старых резерваций. Вот шаги, которые я сделал для создания TPC наследования:Почему при использовании наследования TPC выбирается запрос с использованием левого внешнего соединения?
1) Я производный OldReservation
сущности от Reservations
субъекта
2) Я удалил пересекающиеся свойства от OldReservations
сущности
3) Я тогда очерчен OldReservations
полой таблицы в XML-в EDMX файл
Но когда я бегу folllowing запрос, сгенерированный SQL использует LEFT OUTER JOIN, который не имеет смысла, так как это означает, что запрос будет возвращать только строки из таблицы OldReservations
где Reservations.ReservationID == OldReservations.ReservationID
. Из статей, которые я читал, кажется, что приведенный выше запрос должен использовать оператор UNION, а не LEFT OUTER JOIN:
var reservations = context.Reservations;
foreach (var item in reservations);
Сгенерированный SQL:
SELECT CASE
WHEN (NOT (([Project1].[C1] = 1)
AND ([Project1].[C1] IS NOT NULL))) THEN '0X'
ELSE '0X0X'
END AS [C1],
[Extent1].[ReservationID] AS [ReservationID],
[Extent1].[ReservationDate] AS [ReservationDate],
[Extent1].[ContactID] AS [ContactID],
[Extent1].[EventID] AS [EventID],
[Extent1].[RowVersion] AS [RowVersion]
FROM [dbo].[Reservations] AS [Extent1]
LEFT OUTER JOIN (SELECT [Extent2].[ReservationID] AS [ReservationID],
cast(1 as bit) AS [C1]
FROM [dbo].[OldReservations] AS [Extent2]) AS [Project1]
ON [Extent1].[ReservationID] = [Project1].[ReservationID]
TPC выберите запрос с использованием левого внешнего соединения Безразлично «Имеет смысл, так что я делаю неправильно при создании наследования TPC?
спасибо
Это похоже на запрос для наследования TPT. –
Извините, я не заметил вашего ответа. Я не уверен, к чему вы клоните? – user702769