2011-09-08 12 views
7

Điều này NHibernate blog entry ghi chú cách tách rời các truy vấn QueryOver (tương tự DetachedCriteria) có thể được tạo (sử dụng QueryOver.Of<T>()). Tuy nhiên, nhìn lại nó, nó trông không giống tôi chút nào.Làm thế nào để bạn làm việc với các cá thể QueryOver tách ra?

Với tiêu chí tách rời, tôi sẽ tạo cá thể của tôi và thiết lập nó, tuy nhiên tôi cần và sau đó gọi GetExecutableCriteria() để gán phiên và thực hiện truy vấn. Với "tách rời" QueryOver, hầu hết API không có sẵn (ví dụ: để thêm giới hạn, tham gia, đặt hàng, v.v ...) cho đến khi tôi gọi GetExecutableQueryOver, yêu cầu phải mất ISession hoặc IStatelessSession, tại thời điểm đó bạn không còn bị ngắt kết nối nữa .

Làm cách nào để bạn làm việc với các trường hợp riêng lẻ QueryOver?

EDIT:

vấn đề thực tế có liên quan đến làm thế nào tôi đang lưu trữ các dụ QueryOver tách ra:

public class CriteriaQuery<T> 
{ 
    internal protected QueryOver<T> _QueryOver { get; set; } 

    public CriteriaQuery() 
    { 
     _QueryOver = QueryOver.Of<T>(); 
    } 

    // Snip 
} 

Nó phải là một QueryOver<T, T>.

+0

Vấn đề thực tế bạn đề cập bên dưới là gì? – ruffin

+0

'QueryOver ' không có API tôi mong đợi; 'QueryOver ' là những gì tôi cần. –

Trả lời

12

Tôi đang sử dụng NHibernate 3.1.0.4000. Các mã sau biên dịch thành công:

Employee salesRepAlias = null; 

var query = QueryOver.Of<Customer>() 
    .JoinAlias(x => x.SalesRep,() => salesRepAlias) 
    .Where(x => x.LastName == "Smith") 
    .Where(() => salesRepAlias.Office.Id == 23) 
    .OrderBy(x => x.LastName).Asc 
    .ThenBy(x => x.FirstName).Asc; 

return query.GetExecutableQueryOver(session) 
    .List(); 

này minh họa sử dụng hạn chế, tham gia, và đặt hàng trên QueryOver tách ra giống như bạn làm với một thường xuyên.

Bạn có thể vui lòng đăng mã thể hiện các tính năng API không khả dụng không?

+0

Chọn câu trả lời của bạn và thêm vấn đề thực tế vào câu hỏi, khiến bài đăng của bạn đẩy tôi vào vấn đề. Cảm ơn. –