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>
LightSwitch & SQLite
Pubblicato da sierrodc in LightSwitch il febbraio 4, 2012
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.