Domanda

Ho il seguente modello di dati:

Page
- Id      // Pk
- Type    // int

Section
- Id      // Pk
- Page    // Fk

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

Sto cercando di interrogare tutti i commenti che sono associati a una determinata pagina (Say page.id = 2 e page.Type = 1) entro un limite di tempo. Ho cercato in questo modo:

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

Tuttavia, questo non riesce come ottengo un errore dice "non potrebbe risolvere proprietà: Pagina di: TestNamespace.Comment". Questo normalmente indicherebbe errori di mappatura, ma funziona in tutti gli altri casi, quindi sono propenso a credere alle bugie di errore nella query.

A peggiorare le cose, Comment.Section potrebbe essere nullo, in alcuni casi (non ci sono commenti che non sono associati con una sezione, né la pagina). In questo caso voglio ignorare quei commenti.

Qualche consiglio?

Grazie!

È stato utile?

Soluzione

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

Ho aggiornato il codice di base n tuo commento. La seconda linea di specifico è stato aggiunto, e la linea 3 sta usando l'alias in 2 ° linea anziché la proprietà, e così via.

Altri suggerimenti

È possibile utilizzare le chiamate createCriteria aggiuntive per navigare attraverso la struttura del database

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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top