2012-09-24 25 views
5

Tôi đang sử dụng EF4, mã đầu tiên. Như vậy, các lớp mô hình của tôi có kết hợp các thuộc tính công cộng, một số thuộc tính ảo (cho dữ liệu được tải từ các bảng khác) và một số thuộc tính được gắn với các thuộc tính [NotMapped] để chúng bị bỏ qua bởi EF.nhận truy vấn nguyên gốc Khung thực thể để tôn trọng các thuộc tính

Đôi khi tôi muốn sử dụng truy vấn thô: c.Database.SqlQuery<T>("select ...") để sử dụng EF làm công cụ lập bản đồ hàng.

Tôi nhận thấy trong Intellitrace rằng các truy vấn này tạo ra nhiều ngoại lệ bị ném và bị bắt đối với "IndexOutOfRange". Sau khi tìm kiếm, các ngoại lệ là tất cả cho các thuộc tính ảo và [NotMapped] trên đối tượng mô hình. Tôi không muốn phải xây dựng một lớp mô hình dữ liệu mới hoặc lớp cha với chỉ các thuộc tính bảng trong đó; là có một số bước cấu hình tôi đã bỏ lỡ để nói cho người lập bản đồ hàng trong runner truy vấn thô để chú ý đến các chú thích tương tự mà phần còn lại của EF sử dụng? Có lẽ họ đã sửa lỗi này trong EF5?

Trả lời

1

Nếu bạn thực hiện dbContext.Database.SqlQuery EF sẽ không bao giờ sử dụng ánh xạ. Nó sẽ chỉ sử dụng kết hợp đơn giản của tên và cột thuộc tính trong tập hợp kết quả. Hãy thử sử dụng dbSet.SqlQuery để thay thế. Nó phải phản ánh ánh xạ vì nó có thể tải dữ liệu như các thực thể đính kèm.

+0

Tôi biết dbSet đã hoạt động; vì nhiều lý do tôi không có dbSet, nơi tôi quan tâm đến việc sử dụng Database.SqlQuery. Vì vậy, nó có vẻ như "không bao giờ" là câu trả lời. – Mikeb

+0

Có, có sự khác biệt lớn giữa hai cuộc gọi đó nhưng tôi không thấy lý do tại sao bạn không nên có 'DbSet'. Bạn có một bối cảnh và bạn biết một loại để gọi 'dbContext.Set () .SqlQuery (....)' nên có thể. –

+0

Đã cố gắng để xem nó có nhanh hơn hay không, và nhớ tại sao tôi không làm điều đó: "Kiểu thực thể (T) không phải là một phần của mô hình cho bối cảnh hiện tại." – Mikeb

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