Giả sử tôi muốn kiểm tra đơn vị lôgic truy vấn của Khung thực thể, một cách sẽ là chuyển đổi DbSet<T>
thành IQueryable<T>
trước khi xây dựng cây biểu thức để dễ dàng nhạo báng. Đây có phải là "an toàn" và có điều gì cần lưu ý không?Đang gọi AsQueryable <T> trên DbSet <T> "safe"?
Trả lời
Nó không chỉ an toàn, nó là hợp pháp và đầy đủ tiêu chuẩn. Đây là những gì OO là tất cả về. Bạn chỉ cần downcast. A DbSet
HAS là IQUeryable
, theo hợp đồng được xác định bởi nhà thiết kế.
Hãy cẩn thận với AsQueryable()
. Nếu một trong các biến của bạn thuộc loại IQueryable<IEntity>
sau khi gọi AsQueryable()
, bạn không biết loại biến thể bê tông nào là biến số (ví dụ DbSet<IEntity>
).
Trong khi nó hoàn toàn hợp lệ từ quan điểm OOP (đó là toàn bộ điểm của giao diện!), Nó có thể dẫn đến nhiều lỗi/lỗi. Hãy nhớ rằng cho đến khi bạn liệt kê một nguồn DbSet<IEntity>
, bạn không thực sự thực hiện truy vấn.
Đó là lý do tại sao ví dụ bạn có thể không tham gia vào một trong bộ nhớ IQueryable<IEntity>
(ví dụ new List<IEntity>{ ... }.AsQueryable()
) với kết quả của một DbSet<IEntity>
sử dụng .Union(...)
...
- 1. Khi nào sử dụng DbSet <T> .Thêm() vs DbSet <T> .Attach()
- 2. Làm cách nào để chuyển đổi IQueryable <Patient> này thành DbSet <Patient>?
- 3. iterating over DbSet <TEntity> vs IQueryable <out T>
- 4. Tạo DbSet <T> động trong Khung thực thể?
- 5. Sử dụng IQueryable <TEntity> thay DbSet <TEntity> vấn đề
- 6. Có cái gì đó như DbSet <T> .RemoveWhere (Predicate <T>)
- 7. nhà điều hành gọi điện thoại << trong gdb
- 8. "Toán tử <<" được gọi là gì?
- 9. GIT tập tin bị hỏng (<<<<<<<< HEAD)
- 10. Gọi Dispose trên một BlockingCollection <T>
- 11. Tài liệu tham khảo cho DBContext, DBSet <> trong Entity Framework
- 12. TinyMCE đang xóa <style> thẻ
- 13. Sử dụng Thư viện Truy vấn Động LINQ với Từ điển <string, object> và .AsQueryable()
- 14. Tôi có thực sự cần sử dụng AsQueryable() trên bộ sưu tập không? đang
- 15. cout << stringstream
- 16. động Func <IQueryable <TEntity>, IOrderedQueryable <TEntity>> Biểu hiện
- 17. cout << "привет"; hoặc wcout << L "привет";
- 18. iOS: Cảnh báo: Cố gắng hiển thị <ModalViewController> trên <ViewController> trong khi đang trình bày
- 19. EJS: <% = so với <% -
- 20. IQueryable <T> vs IEnumerable <T> với Lambda, để chọn?
- 21. Không thể chuyển đổi hoàn toàn loại IEnumerable <T> thành IQueryable <T>
- 22. Làm thế nào để gọi System.Linq.Enumerable.Count <> trên IEnumerable <T> bằng cách sử dụng Reflection?
- 23. Php <? thẻ trên WAMP
- 24. phương thức `foo <bar <baz` thực sự gọi là gì?
- 25. XSD Formatting <element><complexType> vs <complexType /><element/>
- 26. <MailDefinition> và <%%> placeholders
- 27. cout << thứ tự của cuộc gọi đến chức năng nó in?
- 28. Toán tử Bash <<< có nghĩa là gì?
- 29. Php <<< có nghĩa là gì?
- 30. SortedList <>, SortedDictionary <> và Dictionary <>
Về yếu hèn, nhìn vào http 5.0 tài liệu: // msdn.microsoft.com/en-us/library/system.data.entity.dbset(v=vs.103).aspx (không thể tìm thấy phiên bản 6.0), DbSet dường như không kế thừa từ IQueryable, đó là lý do tại sao nó có vẻ hơi cá đối với tôi. – Dante
@JohnNevermore Nhìn vào phiên bản chung: http://msdn.microsoft.com/en-us/library/gg696460(v=vs.103).aspx – ken2k
Silly me, hoàn toàn bỏ qua nó. Cảm ơn. – Dante