Hi Jim,
If the NH dev team recommendation
is to use linq to cast the object array to the intended object type ...
That was a suggestion. If you want the mapped type, the recommendation
would be to retrieve it directly without projections:
Session.QueryOver<Tenant>()
...
.List();
Having the API return an object array, when it *knows* the type of object
...
fail to see why queries with the QueryOver api and projections
wouldn't use the same method that NH uses to populate full objects.
The API can't know which object you are wanting as soon as you use
projections. The API allows arbitrary projections, so all bets are off on
the return type.
Incidentally, while there's no restriction to prevent you trying to manually
create partial Tenant objects, projections/result-transformers are more
typically use to create arbitrary non-mapped types (e.g., DTOs), not mapped
types.
If you simply return the complete objects directly (without projections)
then the query will "use the same method that NH uses to populate full
objects."
Also, I did try to use a ResultTransformer, but was unsuccessful:
You need to alias each of the projections. I gave it a try with the
QueryOver API, and there isn't an easy way of doing this yet. I'll have a
look at making it easier to alias so you can write:
Tenant tenantAlias = null;
Session.QueryOver<Tenant>()
.Select(list => list
.Select(t => t.FirstName).WithAlias(() => tenantAlias.FirstName)
.Select(t => t.LastName).WithAlias(() => tenantAlias.LastName))
.SetResultTransformer(Transformers.AliasToBean<Tenant>())
.List<Tenant>();
For now, your best bet is probably to write your own IResultTransformer, or
simply return the full objects.
I hope that helps.
Richard
--
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.