Friday, 15 August 2014

NHibernate check for same join in QueryOver -



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