В базе данных у меня есть таблицы Reservations
и OldReservations
, где OldReservations является копией (из таблицы Reservations
) и используется для хранения старых резервирований. Вот шаги, которые я сделал для создания наследования TPC:
1) Я получил OldReservation
сущность от Reservations
сущности
2) Я удалил перекрывающиеся свойства из OldReservations
сущности
3) Затем я сопоставил поля таблицы OldReservations
в XML файла EDMX
Но когда я запускаю следующий запрос, сгенерированный 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?
спасибо