NHibernate check for same join in QueryOver -
using queryover creating query this
bulkactionitem bulkactionitemalias1 = null; bulkactionitem bulkactionitemalias2 = null; var query = getsession().queryover<student>(() => studentalias) .joinalias(() => studentalias.bulknotifications, () => bulkactionitemalias1, nhibernate.sqlcommand.jointype.leftouterjoin); if (query.underlyingcriteria.getcriteriabyalias("bulkactionitemalias2") == null query = query.joinalias(() => studentalias.bulknotifications, () => bulkactionitemalias2, nhibernate.sqlcommand.jointype.leftouterjoin);
this crash because have same bring together twice different aliases. possible check if bring together exists on query, different alias?
i haven't found built-in way accomplish this. typically utilize out
parameter extension methods maintain track of tables part of query. example:
bool joinedonbulknotifications; bulknotification notificationalias = null; expression<func<object>> aliasexpr = () => notificationalias; var query = getsession().queryover<student>(() => studentalias) .filterbybulknotificationstatus( somecondition, aliasexpr, out joinedonbulknotifications); public static class queryextensions { public static iqueryover<student, student> filterbybulknotificationstatus( iqueryover<student, student> query, bool somecondition, expression<func<object>> aliasexpr, out bool joinedonbulknotifications) { joinedonbulknotifications = false; if (somecondition) { joinedonbulknotifications = true; query.joinalias(s => s.bulknotifications, aliasexpr); } homecoming query; } }
the issue might need reuse alias created later. might tempted pass in bulknotification
, utilize that, works if parameter name matches name of variable pass extension method. nhibernate uses name of variable create alias name, if these 2 not match, you'll error. because of this, need wrap alias in expression
, utilize instead.
this isn't clean option, hope has improve solution.
nhibernate queryover
No comments:
Post a Comment