Я могу использовать временные таблицы в SQL Server 2016. Entity Framework 6, к сожалению, еще не знает эту функцию. Есть ли возможность обхода пути использовать новые параметры запросов (см. msdn) с Entity Framework 6?Как использовать временную таблицу с системной версией и платформу Entity Framework?
Я создал простой демонстрационный проект с временной таблицей сотрудников:
Я использовал EDMX отобразить таблицу для лица (thanks to Matt Ruwe):
Все отлично с чисто SQL заявления работает:
using (var context = new TemporalEntities())
{
var employee = context.Employees.Single(e => e.EmployeeID == 2);
var query = $"SELECT * FROM [TemporalTest].[dbo].[Employee] FOR SYSTEM_TIME BETWEEN '0001-01-01 00:00:00.00' AND '{employee.ValidTo:O}' WHERE EmployeeID = 2";
var historyOfEmployee = context.Employees.SqlQuery(query).ToList();
}
Возможно ли добавить функциональность истории для каждого объекта без чистого sql? Мое решение как расширение объекта с отражением для обработки запроса sql из IQuerable не является совершенным. Есть ли существующее расширение или библиотека для этого?
редактировать: (на основе комментария Pawel)
Я попытался использовать таблицу-функцию:
CREATE FUNCTION dbo.GetEmployeeHistory(@EmployeeID int, @startTime datetime2, @endTime datetime2)
RETURNS TABLE
AS
RETURN
(
SELECT
EmployeeID,
[Name],
Position,
Department,
[Address],
ValidFrom,
ValidTo
FROM dbo.Employee
FOR SYSTEM_TIME BETWEEN @startTime AND @endTime
WHERE EmployeeID = @EmployeeID
);
using (var context = new TemporalEntities())
{
var employee = context.Employees.Single(e => e.EmployeeID == 2);
var historyOfEmployee = context.GetEmployeeHistory(2, DateTime.MinValue, employee.ValidTo).ToList();
}
Должен ли я создать функцию для каждого объекта или существует общий вариант?
Рассматривали ли вы с помощью TVF? – Pawel
Можно получить правильный тип объекта? В этом примере GetEmployeeHistory извлекает Employee вместо «неизвестного» типа? – cSteusloff
Да. Можно получить правильный тип объекта. Я не помню из головы, но дизайнер может захотеть добавить тип к модели для вашего TVF. Вы не хотите этого - вы хотите использовать существующий тип. Важно то, что TVF возвращает правильные столбцы, чтобы материализовать объекты. – Pawel