Mogę używać tabel czasowych w SQL Server 2016. Entity Framework 6 niestety jeszcze nie zna tej funkcji. Czy istnieje możliwość obejścia możliwości korzystania z nowych opcji zapytań (patrz msdn) za pomocą Entity Framework 6?Jak używać tabeli temporalnej z systemem Entity Framework?
stworzyłem prosty projekt demo z pracownikiem tabeli czasowej:
użyłem edmx mapować stół do podmiotu (thanks to Matt Ruwe):
wszystko działa poprawnie z czystym 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();
}
Czy można dodać funkcjonalność historii do każdego obiektu bez czystego sql? Moje rozwiązanie jako rozszerzenie jednostki z refleksją nad manipulowaniem zapytaniem sql z IQuerable nie jest idealne. Czy istnieje istniejące rozszerzenie lub biblioteka, aby to zrobić?
edit: (Na podstawie komentarzem Pawel)
próbowałem użyć wycenione tabela funkcji:
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();
}
muszę utworzyć funkcję dla każdego podmiotu czy istnieje ogólna opcja?
Czy uważane za pomocą TVF? – Pawel
Możliwe jest uzyskanie prawidłowego typu obiektu? W tym przykładzie GetEmployeeHistory retruns Pracownik zamiast "nieznany" typ? – cSteusloff
Tak. Możliwe jest uzyskanie właściwego typu jednostki. Nie pamiętam z góry, ale projektant może chcieć dodać typ do modelu dla twojego TVF. Nie chcesz tego - chcesz użyć istniejącego typu. Ważne jest to, że TVFs zwraca odpowiednie kolumny, aby możliwe było zmaterializowanie podmiotów. – Pawel