Archivio per febbraio 2012

Knockout containerless binding

In ambito XAML per mostrare una lista di elementi occorre impostare il datacontext di un ItemsControl ad una IEnumerable<T>. L’ItemsControl poi rendererizza la lista in base al DataTemplate specificato nella proprietà ItemTemplate.
Per aggiungere oggetti nuovi ho sempre usato ItemTemplateSelector e/o CompositeCollection, ma la presenza di un container l’ho sempre considerata obbligatoria (correggetemi se sbaglio).

Ho considerato l’assioma valido anche in Knockout, ma non è così. Con knockout è possibile scrivere un “contenitore fittizio” tramite commenti:

<!-- ko ... -->
<!-- /ko -->

Tramite questa feature è possibile (come nel mio caso particolare) creare una tabella con un numero di colonne variabili:

<table id="classificationTable">
    <thead>
        <tr>
            <td>Rank</td>
            <td>Country</td>
            <td>Full Name</td>
            <!-- ko foreach: batteries -->     
                <td>R<span data-bind="text: $data"></span></td>
            <!-- /ko -->
            <td>TOT</td>
        </tr>
    </thead>
    <tbody data-bind="foreach: positions">
        <tr>
            <td data-bind="text: rank"></td>
            <td data-bind="text: country"></td>
            <td data-bind="text: fullname"></td>
            <!-- ko foreach: regularShots -->
                <td data-bind="text: $data"></td>
            <!-- /ko -->
            <td data-bind="text: totalRegularPoints"></td>
        </tr>
    </tbody>
</table>
Pubblicità

,

Lascia un commento

LightSwitch & SQLite

Premetto che non avrei mai scritto un post sull’argomento, però dato che mi piace fare delle considerazioni, ne sfrutto l’occasione.

Partiamo subito dalle considerazioni. LightSwitch è un prodotto Microsoft che permette di realizzare applicazioni 3-Tier.
Dall’uscita del prodotto, subito sono sorte domande la cui risposta (imho) è negativa ovvero:
– Lightswitch è/tenta di sostituire Access? No. Access è Access, ha un altro target. Può sembrare simile, ma solo in lontananza.
– E’ possibile creare applicazioni 1-Tier? No. O meglio, LightSwitch non è pensato per questo.
– E’ possibile utilizzare strumenti/tecniche che l’ide non permette velocemente di utilizzare? Ni. Si può fare ma a vostro rischio e pericolo. Questo significa che si può fare con difficoltà, con difficoltà si manterrà nelle prossime versioni, con difficoltà si potrà deployare ecc ecc.
 
Detto questo veniamo al punto. Imho, LS + SQLite = No. No perchè SQLite non è pensato per avere multiutenza (i lock vengono messi sul file intero==è come avere un lock su tutto il db), si può usare sqlserver express senza problemi, è complicato da deployare.

Avendo premesso tutto questo (la parte secondo me importante), ecco come usare SQLite:

1) Utilizzare il provider ADO.NET scaricabile all’indirizzo http://system.data.sqlite.org.
Attualmente non è incluso l’addin per visual studio. Se servisse, installare il pacchetto (non più mantenuto) da http://sqlite.phxsoftware.com
2) Sviluppare aggiungendo un nuovo datasource e selezionando il provider SQLite.
3) Deployare l’applicazione normalmente.
4) Una volta effettuato il deploy, LS funziona correttamente ma è necessario configurare SQLite:
– aggiungere nella cartella di bin su IIS gli assembly dei provider: System.Data.Sqlite.dll e System.Data.Sqlite.Linq.dll.
– modificare il web.config per aggiungere il provider:
    <system.data>
        <DbProviderFactories>
            <remove invariant=”System.Data.SQLite”/>
            <add name=”SQLite Data Provider” invariant=”System.Data.SQLite” description=”.Net Framework Data Provider for SQLite” type=”System.Data.SQLite.SQLiteFactory, System.Data.SQLite” />
        </DbProviderFactories>
    </system.data>
– copiare il database di SQLite in una cartella nuova (che chiamerò dbfolder).
– occorre dare i permessi di modifica/scrittura alla cartella dbfolder all’application pool (quindi IIS AppPool/DefaultAppPool o altro)
– modificare la connection string nel web.config con il percorso del database SQLite.
 
Come si può notare, non è tanto un problema di LightSwitch, quanto di SQLite.
E’ vero che LS non è perfetto e migliorabile (cosa non lo è) però a volte la strada più semplice è la migliore.

,

Lascia un commento