I have a class
public class Account {
public DateTime? StartDate {get;set;}
public DateTime? EndDate {get;set;}
public bool IsActive {get;set;}
}
the IsActive property is defined as a formula as
.Formula(" StartDate < GETDATE() and (EndDate is NULL or EndDate > GetDate())")
However when use QueryOver to query all Accounts where the IsActive == true I get an error that NHibernate cannot execute a SQL.
The SQL that NHibernate generates has
...other criterias...
and this_.StartDate < GETDATE()
and (this_.EndDate is NULL
or this_.EndDate > GetDate()) = 1
How do I define the Formula correctly.
Is Formula the right way to go above doing this or is there a completely different way to go about it
Update :
- Is there a way to do this without altering the underlying database
Thanks
I think this will work but I didn't test it with NHibernate to make sure that the condition is interpreted correctly. You have to use LINQ queries with this method. You could also take a similar approach using extension methods.
Usage:
Define the formula on the table itself as a computed column. This has the benefit of working outside of NHibernate as well, without needing to duplicate the formula logic. You will need to inform your NHibernate map that it should never attempt to write to the computed column by setting "Generated" to always.
The
Formula
should/must in this case return thebool
. So, we can redifine the formula this way (SQL Serever syntax):(The parentheses are not needed, but...) Returned values are 1 or 0 representing bool. So now this
QueryOver
will work: