Tôi có thể sử dụng bảng thời gian trong SQL Server 2016. Entity Framework 6 không may là chưa biết tính năng này. Có khả năng giải pháp khác để sử dụng các tùy chọn truy vấn mới (xem msdn) với Khung thực thể 6 không?Làm cách nào để sử dụng Bảng tạm thời được hệ thống hóa với Khuôn khổ thực thể?
Tôi tạo ra một dự án trình diễn đơn giản với một bảng thời gian người lao động:
tôi đã sử dụng edmx để ánh xạ bảng để tổ chức (thanks to Matt Ruwe):
Tất cả mọi thứ hoạt động tốt với các báo cáo tinh khiết 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();
}
Có thể thêm chức năng lịch sử cho mọi thực thể không có sql thuần túy không? Giải pháp của tôi như là phần mở rộng thực thể với sự phản chiếu để thao tác truy vấn sql từ IQuerable không hoàn hảo. Có tiện ích mở rộng hoặc thư viện hiện tại để thực hiện việc này không?
chỉnh sửa: (Dựa trên những lời bình luận bởi Pawel)
tôi cố gắng sử dụng một bảng giá trị Chức năng:
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();
}
Tôi có phải tạo một hàm cho từng đối tượng hoặc có một lựa chọn chung?
Bạn đã xem là sử dụng một TVF? – Pawel
Có thể lấy đúng loại thực thể? Trong ví dụ này, GetEmployeeHistory retruns Employee thay vì loại "unknown"? – cSteusloff
Có. Có thể lấy đúng loại thực thể. Tôi không nhớ từ đỉnh đầu của tôi nhưng nhà thiết kế có thể muốn thêm một loại cho mô hình cho TVF của bạn. Bạn không muốn điều đó - bạn muốn sử dụng loại hiện có. Điều quan trọng là TVFs trả về các cột bên phải để có thể thực hiện các thực thể. – Pawel