9

Tôi có lớp khách hàng sau:Tôi có thể tải một thuộc tính điều hướng bằng cách ủy nhiệm cho một thủ tục lưu sẵn trong EF không?

public class Customer 
{ 
    public long Id { get; set; } 

    public virtual ICollection<Order> Orders { get; set; } 
} 

cơ sở dữ liệu của tôi có khách hàng và bảng Orders, nhưng không có mối quan hệ chính nước ngoài. Các đơn đặt hàng cho một khách hàng thu được bằng cách sử dụng một thủ tục lưu sẵn lấy ID khách hàng và trả về các hàng đơn đặt hàng. Tôi không thể sửa đổi cơ sở dữ liệu.

Tôi biết cách gọi thủ tục được lưu trữ từ Entity Framework, nhưng, có thể cấu hình DbContext bằng API thông thạo để truy cập vào bộ sưu tập Đơn hàng của đối tượng khách hàng sẽ tải các thực thể qua cuộc gọi đến thủ tục?

Tôi đang sử dụng phiên bản EF mới nhất.

+0

Xin chào, bạn đã giải quyết vấn đề này chưa? – SimonGates

+0

Tôi sẽ rất ngạc nhiên nếu bạn có thể, tôi nghĩ rằng các tùy chọn duy nhất là Eager Đang tải hoặc tạo khóa ngoại. – Heberda

+0

Bạn không thể tạo chế độ xem giống như vậy? Tại sao bạn muốn tải chậm? Tại sao bạn cần các thủ tục được lưu trữ? –

Trả lời

1

Không, bạn không thể. Tải trọng lười được mã hóa trong đối tượng proxy mà EF tạo (nếu có thể), không có cách nào để chặn/cấu hình cách proxy được tạo ra.

Thậm chí không thể ánh xạ hành động đọc mặc định của số DbSet đến quy trình được lưu trữ. Nó luôn là một truy vấn. Chỉ create, update and delete can be mapped to stored procedures. Lý do (tôi nghĩ) là các thủ tục được lưu trữ không phải là composable, vì vậy nếu trong một truy vấn LINQ phức tạp, một thực thể sẽ được ánh xạ tới một thủ tục lưu sẵn (để đọc), nó sẽ không thể biến truy vấn thành một Câu lệnh sql.

+0

dựa trên câu trả lời ở trên, tùy chọn duy nhất để tải chậm sẽ là tạo chế độ xem. –

Các vấn đề liên quan