5

tôi có mô hình dữ liệu sau:Làm thế nào để làm nhiều tham gia với NHibernate Tiêu chuẩn API

Page 
- Id  // Pk 
- Type // int 

Section 
- Id  // Pk 
- Page // Fk 

Comment 
- Id  // Pk 
- Section // Fk 
- Date // DateTime 

Tôi đang cố gắng để truy vấn tất cả các ý kiến ​​có liên quan đến một trang nào đó (Say page.id = 2 và trang .Type = 1) trong một giới hạn thời gian. Tôi đã thử nó như sau:

var criteria = session.CreateCriteria<Comment>() 

    .Add(Restrictions.Eq("Section.Page.Id", pageId)) 
    .Add(Restrictions.Eq("Section.Page.Type", pageType)) 
    .Add(Restrictions.Ge("Date", start)) 
    .Add(Restrictions.Lt("Date", end)); 

Tuy nhiên, điều này không thành công khi tôi không thể giải quyết thuộc tính: Trang của: TestNamespace.Comment ". Điều này thường sẽ chỉ ra các lỗi ánh xạ, nhưng nó hoạt động trong tất cả các trường hợp khác, vì vậy tôi có khuynh hướng tin rằng lỗi nằm trong truy vấn.

Để làm cho vấn đề tồi tệ hơn, chú thích.Section có thể không có trong một số trường hợp (có các nhận xét không được liên kết với một phần hoặc trang). Trong trường hợp đó, tôi muốn bỏ qua những nhận xét đó.

Bạn có lời khuyên nào không?

Cảm ơn!

+0

Bạn có thể thêm định nghĩa cho các loại Mất rằng các tiêu chuẩn dựa trên? – Richard

+0

Um, tôi đã sao chép mã đó từ một nơi nào đó..loss nên được bình luận thực sự. Tôi đã chỉnh sửa bài đăng và sửa lỗi. – user315648

Trả lời

4
var criteria = session.CreateCriteria<Comment>() 
    .CreateAlias("Section", "section") 
    .CreateAlias("section.Page", "page") 
    .Add(Restrictions.Eq("page.Id", pageId)) 
    .Add(Restrictions.Eq("page.Type", pageType)) 
    .Add(Restrictions.Ge("Date", start)) 
    .Add(Restrictions.Lt("Date", end)); 

Tôi đã cập nhật mã dựa trên nhận xét của bạn. Dòng thứ 2 được thêm vào và dòng thứ 3 sử dụng bí danh trong dòng thứ 2 thay vì thuộc tính, v.v.

+0

Điều đó đưa ra một lỗi: L ERI: 42P01: thiếu mục nhập khoản TỪ cho bảng – user315648

+0

Kiểm tra câu trả lời được cập nhật. – Meligy

+0

Nó hoạt động ngay bây giờ! Cảm ơn! – user315648

0

Bạn có thể sử dụng thêm CreateCriteria gọi để điều hướng thông qua cấu trúc cơ sở dữ liệu

var criteria = session.CreateCriteria<Comment>() 
       .Add(Restrictions.Ge("Date", start)) 
       .Add(Restrictions.Lt("Date", end)) 
       .CreateCriteria("Section") 
       .CreateCriteria("Page") 
       .Add(Restrictions.Eq("Id", pageId)) 
       .Add(Restrictions.Eq("Type", pageType)); 
Các vấn đề liên quan