BlogServiceHost.Create()

WCF & Azure - Il blog di Fabio Cozzolino

Recent Posts

Tags

My

Twitter

Community

Archives

Email Notifications

Social Bar Widget

April 2011 - Posts

NHibernate e l’operatore ternario

Durante la migrazione di un’applicazione esitente da Linq To SQL a NHibernate, mi sono imbattuto in una query che faceva uso dell’operatore ternario (condition ? doIfTrue : doIfFalse ). L’uso della query era necessario perchè un particolare filtro doveva essere applicato solo se il parametro passato a quella funzione veniva specificato.

Riporto una versione simile:

   1: IEnumerable<T> DoQuery<T>(string p1, string p2, string p3)
   2: {
   3:     var query = from item in items
   4:                 where (p1 == null) ? true : item.Name == p1
   5:                 where (p2 == null) ? true : item.Cognome == p2
   6:                 select items;
   7:  
   8:     return query;
   9: }
Con Linq To SQL la query funzionava egregiamente. Con NH, invece, non ne voleva sapere, generando una query simile a questa:
   1: SELECT * FROM Items WHERE 1 = 0 AND 1 = 1 ...

E’ evidente che il provider Linq di NH non va molto d’accordo con l’operatore ternario. Chiaramente la query è un fallimento totale Smile. La soluzione più semplice è stata quella di creare una “conditional where” come estensione di IQueryable:

   1: public static class QueryableExtensions
   2: {
   3:     public static IQueryable<T> Where<T>(this IQueryable<T> source, 
   4:         bool condition, 
   5:         Expression<Func<T, bool>> predicate)
   6:     {
   7:         if (condition)
   8:         {
   9:             return source.Where(predicate);
  10:         }
  11:         return source;
  12:     }
  13: }
Ovviamente l’utilizzo qui è semplice:
   1: IEnumerable<T> DoQuery<T>(string p1, string p2, string p3)
   2: {
   3:     var query = items
   4:         .Where(p1 != null, i => i.Name == p1)
   5:         .Where(p2 != null, i => i.Cognome == p2);
   6:  
   7:     return query;
   8: }

Ovviamente la potete chiamare come più vi piace: Where, WhereIf, ConditionalWhere… non fa differenza, l’importante è che funzioni, ma soprattutto può tornare utile anche in altri scnari Smile. Possiamo infatti creare una Where in grado di eseguire azioni diverse se la condizione è true o false:

   1: public static IQueryable<T> Where<T>(this IQueryable<T> source, 
   2:     bool condition, 
   3:     Expression<Func<T, bool>> predicateIfTrue, 
   4:     Expression<Func<T, bool>> predicateIfFalse)
   5: {
   6:     return condition 
   7:         ? source.Where(predicateIfTrue) 
   8:         : source.Where(predicateIfFalse);
   9: }

Non so quanti di voi utilizzano Linq, ma io lo trovo semplicemente stupefacente.

Magari ne riparliamo in un prossimo workshop…

À Bientôt

Annunciata la release commerciale di Windows Azure AppFabric Caching

La notizia era nell’aria già da tempo. Pochi minuti fa durante il MIX11 è stata annunciata per fine aprile la prima versione commerciale di Windows Azure AppFabric Caching, un servizio di cache distribuita, in-memory, che migliora sensibilmente le performance di applicazioni Windows Azure e SQL Azure.

Alcune delle capacità di Azure AppFabric Caching:

  • Caches all types of data (CLR objects, rows, XML, binary data etc)
  • Provides multi-tenant caching service
  • Hosted on Windows Azure
  • Safeguards access to data using Windows Azure AppFabric Access Control service
  • Highly scalable, 64-bit service

Azure AppFabric Caching basa la sua struttura su Windows Server AppFabric Caching (a.k.a. Velocity) adattandola al cloud.

Questo il post dell’annuncio.

Windows Azure AppFabric V2 Released

Ieri è stata rilasciata ufficialmente la V2 di Windows Azure AppFabric, precedente disponibile attraverso AppFabric LABS. La V2 introduce molte novità, soprattutto per quello che riguarda l’ACS, tra cui:

  • Federazione out-of-the-box con ADFS 2.0, Windows Live ID, Google, Yahoo!!! e Facebook;
  • Delegation con OAuth 2.0;
  • Integrazione con Windows Identity Foundation;
  • Supporto a WS-Federation, WS-Trust, OpenID 2.0, OAuth 2.0;

L’elenco completo delle novità è disponibile nel post ufficiale. Fortunatamente per chi ha in mano il mio libro su Windows Azure non cambia assolutamente nulla. Il capitolo su Windows Azure AppFabric ACS era basato sulle principali funzionalità dei AppFabric LABS e sul Management Portal sviluppato in Silverlight e rilasciato a febbraio 2011.

Ad un primo impatto non mi sembra di vedere grossi stravolgimenti rispetto alla versione LABS, quindi tutto quanto scritto nel libro è ancora assolutamente valido. Ho voluto infatti mostrare principalmente i concetti che stanno alla base di ACS e l’approccio necessario al suo utilizzo. Credo (e spero) sia stata una mossa vincente Open-mouthed smile!

Ovviamente ogni tipo di feedback è come sempre ben accetto.

MVP per un altro anno :)

Sono fermamente convinto che la community è un posto fantastico. Quando c’è gente che con entusiasmo si impegna costantemente e continua a condividere le proprie esperienze e conoscenze, non si può far altro che crescere.

Grazie a tutti quelli che ad ogni evento, continuano a seguirci, con la loro voglia di sapere, di migliorarsi, di essere dei professionisti fuori dal comune, senza aver paura di “condividere”.

Workshop “Applied Patterns” – Done

Complimenti a tutti. L’evento è davvero riuscito. Un buon numero di partecipanti, argomenti belli tosti, e tutti incollati alle sedie fino alla fine. Complimenti a Raffaele e a Leo.

La Open Session finale direi che è ben riuscita, la discussione si è animata e ci ha permesso di discutere in maniera più diretta delle problematiche affrontate durante l’evento, ognuno con le proprie esperienze. La discussione si è ampliata per poi abbracciare tutti i possibili campi di applicazione della DI e di MEF. Sicuramente riproporremo la formula nei prossimi workshop.

Grazie a tutti i partecipanti Smile