does using Linq like that, with a select, equate to projections with
criteria? (aka, would it ignore fetching an association that is not included
in the select, that might be mapped with a join? it's just much more legible
than criteria :D)

------
Joe Brockhaus
[email protected]
------------


On Fri, Sep 30, 2011 at 12:14 AM, Tim Scott <[email protected]>wrote:

> You can certainly do this with NHibernate. However, I disagree that we
> rarely query just one table. We rarely do joins like the one illustrated in
> a business domain context. Your example query is more common for reporting
> or presentation needs. In many systems -- commonly small to medium sized
> systems -- you use a normalized relational database to handle multiple
> concerns: business domain, reporting and presentation. For larger system
> sit's not uncommon to have a separate de-normalized (or NoSql) read data
> store to support reporting and presentation.
>
> Oaky, enough philosophy. I assume that we are talking about the former
> case. You can do it one of 4 ways:
>
> 1) Fetch lists of entities, and map them to DTOs in memory. You can
> hand-code your mapping or use a tool like AutoMapper.
> 2) Fetch DTOs using NH Linq.
> 3) Fetch DTOs using ICriteria.
> 4) Fetch DTOs using HQL.
>
> Option #1 is pretty obvious. Options 3 and 4 you can find what you need in
> the Google. Hint: search for AliasToBeanTransfromer.
>
> Here is an example of case #2:
>
> var employees = session.Query<Employee>()
>  .Where(x => x.EmploymentDate < date && x.Status == UserStatus.Active)
> //for example
>  .Select(x => new EmployeeListDto
>  {
>  Id = x.id,
>  FirstName = x.FirstName,
>  LastName = x.LastName,
>  CommitteeName = x.Committee.Name
>  });
>
> Notice that I am returning at DTO not an entity. It's a simple data
> container with no behavior. I'm marshaling data to my UI and that's it. If I
> want to do something to one of these employees, I will fetch the entity
> using session.Get(id), and there I will find all kinds of business logic and
> behavior.
>
> Using Linq to get DTOs straight from the database is way cool, but realize
> that it currently has pretty drastic limitations. Usually, I try Linq first,
> then if I run into trouble I move on to ICriteria, then HQL, then in memory
> and in very rare cases I might even (gasp) use straight SQL.
>
>
> On Thursday, September 29, 2011 at 10:31 PM, Influently NHiberater wrote:
>
> > How does an ORM framework handle joins like what we do in plain SQL? Is
> it the case that an ORM framework doesn't explicitly join two or more
> tables?
> >
> > Suppose I have the following two tables in my database:
> >
> > Employees
> > {
> >  Eid int primary key,
> >  FirstName varchar(20),
> >  LastName varchar(20)
> > }
> >
> > Committees
> > {
> >  Cid int primary key,
> >  Name varchar(50), <--- This is the committee name.
> >  ChairId int references Employees.Eid
> > }
> >
> > And I have my POCO classes, EmployeeMap and CommitteeMap defined.
> >
> > Now how can I use Linq or FluentNHibernate Linq to get something like
> what the following SQL query would give me?
> >
> > SELECT e.FirstName, e.LastName, c.Name
> > FROM Employees e
> > INNER JOIN Committees c
> > ON e.Eid = c.ChairId
> >
> > All FluentNHibernate examples I've seen online query only one table, and
> which is pretty simple and straightforward, but in reality, we rarely query
> only one table.
> >
> > Can anyone give me a working example or a pointer to such a thing? Thank
> you.
> >
> >  --
> >  You received this message because you are subscribed to the Google
> Groups "Fluent NHibernate" group.
> >  To view this discussion on the web visit
> https://groups.google.com/d/msg/fluent-nhibernate/-/gqPPQqqV7D0J.
> >  To post to this group, send email to 
> > [email protected](mailto:
> [email protected]).
> >  To unsubscribe from this group, send email to
> [email protected] (mailto:
> [email protected]).
> >  For more options, visit this group at
> http://groups.google.com/group/fluent-nhibernate?hl=en.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Fluent NHibernate" 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/fluent-nhibernate?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" 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/fluent-nhibernate?hl=en.

Reply via email to