giovedì 10 dicembre 2009 #

NHibernate in applicazioni desktop

Ho sempre notato che la maggior parte degli esempi e della documentazione che si trova in rete su NHibernate riguarda applicazioni web, e per me che ho sempre dato precedenza ad applicazioni Smart Client, è stato un problema, almeno all’inizio.

Fortunatamente, il solito Ayende è corso in nostro aiuto: su MSDN magazine è stato pubblicato un suo  articolo che tratta l’utilizzo di NHibernate in un’applicazione WPF, spiegando con quali tecniche gestire la concorrenza, il databinding e la Session in un contesto molto diverso da quello web quale è l’applicazione desktop.
Articolo interessante che merita una lettura: lo trovate qui.

posted @ giovedì 10 dicembre 2009 16.50 | Feedback (2)

domenica 15 novembre 2009 #

Software installato e PowerShell

Tempo fa avevo scritto un post che mostrava come ricavare l’elenco del software installato tramite WMI, con la limitazione, però, di poter avere solo l’elenco di tutto cio che è stato installato tramite Windows Installer.

Ho trovato metodi alternativi per ottenere lo stesso risultato, che sfruttano la potenza di PowerShell e permettono anche di scegliere il formato di output che più ci piace:

  • Foglio di Excel
  • GridView
  • File di testo:

    PS> gp HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*
    | Select DisplayName, DisplayVersion, Publisher, InstallDate, UninstallString
    | Out-File 'installed-sw.txt'

posted @ domenica 15 novembre 2009 23.21 | Feedback (0)

mercoledì 11 novembre 2009 #

Tabelle temporanee e variabili di tipo TABLE

 In SQL Server ci sono due modi per creare una tabella temporanea:

  1. Appoggiarsi al tempdb:

    CREATE TABLE #TempTable(Field1 int, Field2 varchar(10))
    INSERT INTO #TempTable(Field1, Field2) VALUES (42, 'Alberto')
    SELECT * FROM #TempTable

  2. Utilizzare una variabile di tipo TABLE:

    DECLARE @TempTable TABLE (Field1 int, Field2 varchar(10))
    INSERT INTO @TempTable(Field1, Field2) VALUES(42, 'Alberto')
    SELECT * FROM @TempTable

Sebbene i due modi si assomiglino molto, in realtà alcune differenze ci sono, e sono ben riassunte in questo post.

posted @ mercoledì 11 novembre 2009 16.42 | Feedback (0)

giovedì 17 settembre 2009 #

“Un Po di .NET” a Monticelli d’Ongina (PC)

DotDotNetLogo

Ecco gli argomenti che tratterò al workshop:

  1. IoC e Dependency Injection
    1. Di cosa si tratta.
    2. StructureMap e Unity.
    3. Pattern “Service Locator”.
  2. O/RM e persistenza
    1. Pattern “Repository”.
    2. Pattern “Unit of Work”
    3. Persistenza con NHibernate.

Per chi volesse fare un salto, ci vediamo là.

posted @ giovedì 17 settembre 2009 11.45 | Feedback (2)

martedì 8 settembre 2009 #

Sconto per TechDays-WPC ai soci DotDotNet

Dal  24 al 26 novembre 2009 si svolgeranno a Milano i TechDays-WPC, la maggiore conferenza ICT italiana dedicata al mondo Microsoft.
Per i soci DotDotNet è previsto uno sconto di 50 € sul prezzo di iscrizione; chi fosse interessato alla cosa, può inviare una mail a info@dotdotnet.org per sapere come usufruire del benefit.

posted @ martedì 8 settembre 2009 14.00 | Feedback (0)

lunedì 17 agosto 2009 #

Ora, che cosa devo installare?

Quando si aggiorna il sistema operativo, oppure si dà una “sana rinfrescata” (cioè si pialla l’hard disk… ) alla propria installazione, ci tocca poi dover reinstallare tutta quella montagna di software che abbiamo installato nel tempo, e che è sempre difficile da ricordare. WMI ci può dare una mano; tramite il comando:

wmic product

otteniamo un pratico elenco di tutto il sotware installato tramite Windows Installer, da poter utilizzare in seguito come promemoria. E' vero, non è la totalità del software, ma è comunque utile.

Sì, è vero, sto per installare Windows 7

posted @ lunedì 17 agosto 2009 22.00 | Feedback (1)

mercoledì 5 agosto 2009 #

Linq2NHibernate, FirstOrDefault e… I Dire Straits

Tutti conosciamo i Dire Straits, vero? Bene.

La miglior formazione dei Dire Straits, a mio avviso, è stata quella composta da:

Se provassimo a mappare il tutto in un Domain Model, potremmo scrivere:

public class Band 
{    
    public int BandId { get; set; }    
    public IList<Player> Members { get; set; } 
}
public class Player
{    
    public int PlayerId { get; set; }    
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Band Band { get; set; }
}

E ora che abbiamo Linq2NHibernate possiamo scrivere una cosa del tipo:

using (ISession session = SessionHelper.OpenSession()) 
{
    Band myBand = session.Linq<Band>().Expand("Members")
                    .Where<Band>(bnd => bnd.BandId == 1)
                    .FirstOrDefault<Band>();
    Console.WriteLine("Nome band: {0}, numero di componenti: {1}", 
        myBand.Name, 
        myBand.Members.Count); 
}

L'output però non è quello che ci aspettiamo:

Nome band: Dire Straits, numero di componenti: 1

La causa è nel codice SQL generato da Linq2NHibernate, che, da Profiler, risulta essere questo:

exec sp_executesql N'SELECT top 1 this_.BandId as BandId4_1_, 
this_.Name as Name4_1_, members2_.BandId as BandId3_, 
members2_.PlayerId as PlayerId3_, members2_.PlayerId as PlayerId2_0_, 
members2_.FirstName as FirstName2_0_, members2_.LastName as LastName2_0_,
members2_.BandId as BandId2_0_ 
FROM dbo.Band this_ 
    left outer join dbo.Player members2_ on 
        this_.BandId=members2_.BandId 
WHERE this_.BandId = @p0',N'@p0 int',@p0=1

In pratica, la chiamata a FirstOrDefault() aggiunge quel TOP 1 all’SQL generato, che fa sì che venga ritornata solo una riga ritornata dal DB, falsando il conteggio.
I modi per risolvere la questione sono due:

  1. Tornare ad usare la Criteria API :).
  2. Sostituire FirstOrDefault<Band>() con ToList<Band>()[0].

In questo modo, la clausola TOP sparisce e i Dire Straits tornano ad essere cinque:

Nome band: Dire Straits, numero di componenti: 5

posted @ mercoledì 5 agosto 2009 13.50 | Feedback (0)

lunedì 20 luglio 2009 #

Rilasciato NHibernate 2.1.0

E’ stata rilasciata la versione 2.1.0 di NHibernate. Qualche novità:

1. Supporto diretto a SQL Server 2008 (MSSql2008Dialect); NHibernate può usare i tipi di dato Date, Time, DateTime2, DateTimeOffset.

2. Nuovi ID Generators.

3. Executable HQL. E’ possibile scrivere una cosa del tipo:

using (ISession session = GetSession())
{
    using (ITransaction tx = session.BeginTransaction())
    { 
        session.CreateQuery("delete from MyEntity").ExecuteUpdate();  
        tx.Commit();
    }
}

4. Rimozione della dipendenza da Castle.DynamicProxy2 (informazioni qui e qui).

In ogni modo, la lettura del file releasenotes.txt è sempre consigliata.

posted @ lunedì 20 luglio 2009 8.49 | Feedback (0)

giovedì 30 aprile 2009 #

Sorpresone!

Sono andato su MSDN Subscriptions per scaricare la RC di Windows 7, ma qui c’è anche qualcos’altro…

Sorpresone

Let’s download!

posted @ giovedì 30 aprile 2009 20.49 | Feedback (5)

[OT] La matematica non è un’opinione - 2

Matematica

posted @ giovedì 30 aprile 2009 12.48 | Feedback (4)