I'm wondering in what kind of scenario you are experiencing this, because
that is most definitely not how NHibernate works. I use queries like the
mentioned all the time, without issues.

Do you have some code you could show?

Rewriting the expression to include null checks would create a more complex
Linq tree, a more complex HQL tree and eventually a more complex SQL
expression.

/G

2015-05-05 17:47 GMT+02:00 <triadse...@gmail.com>:

> Consider the following domain model:
>
> public class Person {
>     public virtual int Id { get; set;}
>
>     public virtual string Name { get;set; }
>
>     public virtual Pet Pet { get; set; }
> }
>
> public class Pet {
>     public virtual int Id { get; set;}
>
>     public virtual string Name { get;set; }
> }
>
>
> And the following LINQ query:
>
> from Person p in session.Query<Person>()
> select new {
>     Person = p.Name,
>     Pet = p.Pet.Name
> }
>
>
> This query executes fine, until there is a person which has no pet. The
> query then fails with a NullReferenceException somewhere deep in NHibernate
> (or - at least it appears to be). This is because NHibernate simply
> compiles the projection expression and executes it. To mitigate this one
> would need to write the query as follows:
>
> from Person p in session.Query<Person>()
> select new {
>     Person = p.Name,
>     Pet = p.Pet != null ? p.Pet.Name : null
> }
>
> The behavior is in my opinion confusing because other ORM (Entity
> Framework, amongst other) use database semantics here and this would simply
> cause the Expression "p.Pet.Name" to return NULL if any of the properties
> references in the expression return null. Even if one might want to adhere
> to the LINQ to Objects semantics instead, the NullReferenceException is
> best caught then rethrown with some useful message. The other problem is
> that writing these null checks polute the Expression tree passed to the
> LINQ provider.
>
> I propose to do make the following change:
>
> Before the Expression is compiled, a visitor will rewrite the Expression
> tree to add null checks. When a property is null default(T) will be
> returned. ExpressionToHqlTranslationResults seems the best place to do this.
>
> Are you willing to receive a contribution that will implement this, or is
> the current behavior deliberate?
>
> --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "nhibernate-development" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to nhibernate-development+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"nhibernate-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nhibernate-development+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to