Tôi có một dự án Khung thực thể có 5 bảng riêng biệt. Khi tôi truy vấn dữ liệu từ các bảng này và sử dụng .Include()
, truy vấn mà nó tạo ra rất chậm và hết thời gian.Tôi đang thay đổi truy vấn EF linq của mình thành một thủ tục được lưu trữ. Có cách nào dễ dàng để thiết lập ánh xạ phức tạp?
Tôi đã di chuyển truy vấn đến một thủ tục được lưu trữ, và bây giờ đang tìm cách truy vấn thủ tục được lưu trữ này và dễ dàng ánh xạ dữ liệu mà nó trả về các lớp dữ liệu hiện có.
gốc LINQ truy vấn của tôi với DataContext của EF trông như thế này:
var data = (from a in context.A
.Include("B")
.Include("C")
.Include("D")
.Include("E")
where a.Id == someValue
select a);
Nó trả về một đối tượng dữ liệu Entity rằng giống này:
class A
{
int Id;
string otherProperties;
List<B> B;
List<C> C;
List<D> D;
List<E> E;
}
Truy vấn rằng EF tạo ra để chạy trên SQL server trở lại tập hợp kết quả trông giống như sau:
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 ---------------------------------------------------------- A1 A2 B1 B2 A1 A2 C1 C2 A1 A2 C1 C2 A1 A2 C1 C2 A1 A2 D1 D2 A1 A2 D1 D2 A1 A2 D1 D2 A1 A2 E1 E2 A1 A2 E1 E2
(giả định 1 bản ghi B, 3 bản ghi C, 3 bản ghi D và 2 bản ghi E.
Tôi đã sao chép truy vấn này trong một thủ tục được lưu trữ và giảm thời gian chạy của nó thành thực tế, tuy nhiên tôi đang cố gắng tìm cách lập bản đồ tập kết quả thành lớp dữ liệu Entity Framework (lớp A
từ trên).
EF chắc chắn có khả năng này vì nó đã ở đâu đó đằng sau hậu trường khi tôi sử dụng truy vấn LINQ, nhưng tôi không chắc đó có phải là điều tôi có thể truy cập hay không.
Có cách nào dễ dàng trong khung thực thể để ánh xạ một thủ tục được lưu trữ (nhập hàm) cho một lớp khung Entity đa cấp không?
Đây là gói dự phòng của tôi nếu không có giải pháp thay thế dễ dàng nào được tích hợp vào EF. Có rất nhiều thuộc tính trên mỗi lớp, vì vậy sẽ có rất nhiều cách gõ mã để trình chuyển đổi. – Rachel