Tôi đang sử dụng truy vấn này:ngăn chặn chéo không cần thiết tham gia vào truy vấn đếm tạo ra mã sql
return from oi in NHibernateSession.Current.Query<BlaInteraction>()
select new BlaViewModel
{
...
NoPublications = oi.Publications.Count(),
...
};
BlaInteraction chứa một IList các ấn phẩm (ví dụ: thực thể). Để xác định số lượng ấn phẩm, một trong số đó không thực sự cần phải thực hiện tất cả các phép nối cho một ấn phẩm. Tôi có thể ngăn chặn nhibernate bằng cách sử dụng tham gia trong sql được tạo ra (ví dụ: using projection ???) bằng cách nào đó?
Cảm ơn.
Christian
PS:
Đây là những gì NH sản xuất (hơi thích nghi):
select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_, Publication publicatio22_ inner join Statements publicatio22_1_ on publicatio22_.StatementId=publicatio22_1_.DBId where publicatio21_.StatementId = 22762181 and publicatio21_.PublicationId=publicatio22_.StatementId
Đây là những gì sẽ là đủ:
select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_ where publicatio21_.StatementId = 22762181
Bạn có biết rằng nó * đang * hydrating ấn phẩm? SQL Profiler nói gì đang thực sự được chạy trên máy chủ? – AakashM
Cảm ơn - xin lỗi bạn đã đúng. Các tham gia không có gì để làm với 'hydrat hóa'. Tôi đã chỉnh sửa câu hỏi và thêm một số sql. – cs0815
(không phải là một chuyên gia nhibernate) thực tế là nó tạo ra một implciti 'CROSS JOIN' (các bảng trong mệnh đề' FROM' không được tham gia rõ ràng) cho thấy NHibernate thiếu một số kiến thức về mối quan hệ giữa các đối tượng; tuy nhiên, trước hết tôi sẽ muốn kiểm tra các kế hoạch thực thi SQL của truy vấn của nó và truy vấn lý tưởng - có thể là * SQL Server * có thể làm việc dễ dàng. – AakashM