5

Aşağıdaki veri modeli vardır:nasıl yapılır birden NHibernate ölçüt API ile birleştiği

Page 
- Id  // Pk 
- Type // int 

Section 
- Id  // Pk 
- Page // Fk 

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

Belirli bir sayfa (De ki page.id = 2 ve sayfa ile ilgili olarak tüm yorumlar sorgulamak için çalışıyorum .Type = 1) bir zaman sınırı içinde. Böyle denedim:

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)); 

Ancak, bu bir hata diyor olsun ": Sayfa: TestNamespace.Comment özelliği çözemedi" başarısız olur. Bu normalde haritalama hatalarını gösterir, ancak diğer tüm durumlarda çalışır, bu yüzden sorgudaki hatanın yalan olduğuna inanıyorum.

Sorunları daha da kötüye kullanmak için, Comment.Section bazı durumlarda boş olabilir (bir bölüm veya sayfa ile ilişkilendirilmemiş yorumlar vardır). Bu durumda bu yorumları görmezden gelmek istiyorum.

Herhangi bir öneri?

Teşekkürler!

+0

gezinmek için çağrıları kullanabilir? – Richard

+0

Bu kodu bir yerden kopyaladım. Gönderiyi düzenledim ve hatayı düzelttim. – user315648

cevap

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)); 

Yorumunuzu temel alarak kodunuzu güncelleştirdim. Özel olarak 2. satır eklenmiştir ve 3. satır, takma ad yerine özellik yerine 2. satırı kullanmaktadır.

+0

Bu hata veriyor: HATA: 42P01: Tablo – user315648

+0

için FROM yan tümcesi girdisi eksik Güncelleştirilmiş yanıtı kontrol edin. – Meligy

+0

Şimdi çalışıyor! Teşekkürler! – user315648

0

Ek CreateCriteria Eğer ölçüt dayandığı Kaybı türü için tanımını ekleyebilir veritabanı yapısı

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));