I have some different database concerns to deal with where the Data Management staff require composite fields for identifiers in XRef tables. It is possible to make associations, but tests show that retrieval speeds are faster using these type of configurations. I would do as you suggest if I had full control over my DB Design, but I do not!
John Davidson On Thu, Jun 24, 2010 at 8:14 AM, Diego Mijelshon <[email protected]>wrote: > But what you showed was not a complicated query. > With a correctly defined model, it would start like this: > > session.CreateQuery("from Book").List<Book>(); > > That is enough to get a list of books, with navigable relationships. > > If you'd rather retrieve only the needed fields from the DB for a grid, you > could do this: > > session.CreateQuery(@" > select > ID, > Name, > Author.Name, > Author.Address.State, > Publisher.Name, > Publisher.Address.State > from Book > ").List(); > > You can use a transformer to create a DTO on the fly, but the query is just > that. > > Diego > > > > On Thu, Jun 24, 2010 at 00:21, Mike <[email protected]> wrote: > >> I'm up to the last item in your list. That's what I was specifically >> asking about. I've used NHibernate for simple/intermediate queries >> but have yet to successfully construct a large query. >> >> On Jun 23, 5:52 pm, Diego Mijelshon <[email protected]> wrote: >> > The first problem there is "a Stored Proc that populates a grid". >> > You've got to change the way you look at this *radically* if you want to >> > take advantage of NHibernate. >> > >> > I'll give you some starting steps. >> > - Create a rich domain model that represents your entities and their >> > relationships (mapped as references, not Ids) >> > - Map your domain to the DB. You can use XML, Fluent or ConfORM, >> whatever >> > you like best >> > - Design your view, with the corresponding data bindings. You can take >> two >> > approaches here: >> > - Pass the domain objects and bind to nested properties. For example, >> > Name, AuthorAddress.State, etc >> > - Build DTOs/Presentation Models from your domain objects exposing >> just >> > what the grid needs. For example BookName, AuthorAddressState, etc. >> > - Build a simple query that retrieves the root objects. You can use HQL, >> > Criteria, Linq... >> > - Optimize your query and mappings using joining, batching and caching >> to >> > improve performance as needed >> > >> > Diego >> > >> > >> > >> > On Wed, Jun 23, 2010 at 19:05, Mike <[email protected]> wrote: >> > > I'm trying to figure out how to do complicated queries in NHibernate. >> > > I'm trying to refactor a Stored Proc that populates a grid to an >> > > NHibernate query, but I'm having problems because it joins a dozen >> > > tables. I'm aware of setting FetchModes in NHibernate; however, it >> > > just seems like it's going to be difficult to recreate the results of >> > > this query in OO format instead of tabular format. Here's an example >> > > query: >> > >> > > SELECT >> > > Book.ID, >> > > Book.Name, >> > > Author.Name, >> > > AuthorAddress.State, >> > > Publisher.Name, >> > > PublisherAddress.State >> > > FROM >> > > Book >> > > INNER JOIN Author ON (Author.ID = Book.AuthorID) >> > > INNER JOIN Address AuthorAddress ON (AuthorAddress.ID = >> > > Author.AddressID) >> > > INNER JOIN Publisher ON (Publisher.ID = Book.PublisherID) >> > > INNER JOIN Address PublisherAddress ON (PublisherAddress.ID = >> > > Publisher.AddressID) >> > >> > > Now this is a mocked up example, but you can see the Joins go more >> > > than one level deep. After I figure in dynamic sorting and paging, >> > > the Stored Proc yields the exact structure I want to show in my grid. >> > > I'm having problems replicating this with NHibernate. Any advice out >> > > there? Should I be taking a different approach? I thought about >> > > keeping a stored procedure and loading it to a simple DTO for display >> > > in my grid, but there's domain logic I would love to include in the >> > > grid, and I'd hate to replicate it. >> > >> > > Thanks! >> > >> > > -- >> > > You received this message because you are subscribed to the Google >> Groups >> > > "nhusers" group. >> > > To post to this group, send email to [email protected]. >> > > To unsubscribe from this group, send email to >> > > [email protected]<nhusers%[email protected]> >> <nhusers%[email protected]<nhusers%[email protected]>> >> > > . >> > > For more options, visit this group at >> > >http://groups.google.com/group/nhusers?hl=en. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "nhusers" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<nhusers%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/nhusers?hl=en. >> >> > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<nhusers%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
