novembre 2008 Blog Posts

Entity Framework e lo strano errore

Ho voglia di condividere una esperienza che mi è capitata un paio di settimane fa. Tra le altre cose, in questo periodo mi sto occupando del porting di un progetto Legacy, di cui non verrà conservato nulla se non la base di dati. Visti i tempi molto rilassati abbiamo deciso di usarlo come banco di prova per Entity Framework ed assicuro che è un gran bel banco di prova: la creazione del dominio non si limita ad importare lo schema dal DB che è tutt'altro che semplice e "ben fatto". Arrivo al dunque: inizialmente abbiamo creato l'EDM a...

Windows Forms Localizzate

Localizzare delle windows form probabilmente sarà una prassi nota ai più. In ogni caso mi segno sul blog la serie di semplici step che permettono di creare una applicazione Windows Forms localizzata. Quando si aggiunge una Wondows Form all'applicazione si deve impostare la proprietà Localizable a True. Le caption che vengono impostate sulla Form verranno quindi salvate all'interno del file di risorse di default, con nome NomeForm.resx quindi nel nostro esempio Pippo.resx. Attenzione: questo file di risorse è quello che l'applicazione userà se non troverà il file di lingua specifico; al...

Debug di stored procedure in SQL Server 2005

Il debug delle stored procedure di Sql Server 2005 è stato integrato all'interno di Visual Studio. Per poter debuggare una Stored Procedure è sufficiente connettersi col Server Explorer al DB desiderato, sfogliare le Stored Procedure e, cliccando col tasto destro sulla Stored, selezionare nel menu di contesto la voce "Step into Stored Procedure"; a questo punto vengono richiesti i valori per i parametri della Stored, e viene quindi eseguito il debug. Tutto questo funziona normalmente finchè l'istanza del database e Visual Studio sono sulla stessa macchina. Se invece risiedono su macchine diverse si deve fare una considerazioni in...

LINQ ti cambia la vita!

Ammetto che mi emoziono per poco, ma... Da quando ho cominciato ad usarlo l'ho sempre pensato; ogni giorno che passa è sempre una nuova conferma; sentire qualcuno di un certo spessore che lo dice in pubblico ti convince sempre di più. Ed oggi, ancora una volta, mi sono emozionato della velocità e l'eleganza con cui LINQ ti risolve i problemi di query, tanto da indurmi a scrivere questo post. Il mio problema era semplice: dato un array contenente degli oggetti dovevo ottenerne un sottoinsieme in base ad una condizione; la condizione consisteva nel verificare se...

Entity SQL e risultati delle query

Sto provando Entity Sql per interrogare il mio dominio con query create dinamicamente e mi sono imbattuto in un problema: vorrei che la query ritornasse un Set di Entity del mio dominio, mentre se eseguo una query in questo modo: query = "select c from GestionaleEntities.Customers as c where (c.CustomerCode = 'C0001')"; this.dataContext.CreateQuery<Customers>(query).ToList(); viene generata una eccezione con questo messaggio: {"Specified cast from a materialized 'System.Data.Objects.MaterializedDataRecord' to 'Techsol.Gestionale.Domain.Customers' is not valid."} dal quale si deduce che il tipo ritornato dalla query, ovvero un generico MaterializedDataRecord, non è proprio il tipo che mi aspettavo ovvero delle istanze delle mie...

"Pubblicare" i membri internal

Un tip vecchio come il cucco, ma visto che mi è servito stamattina dopo un po' di tempo, me lo segno anche sul blog. Per necessità di testing ho dovuto rendere visibili all'assembly contenente i miei test alcuni membri internal definiti in un altro assembly . Con la seguente riga nel file AssemblyInfo dell'assembly contenente i mebri internal è possibile definire quali altri assembly possono accedervi come se fossero public [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("_NomeAssembly_")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("_NomeAltroAssembly_")]   Matteo   Technorati Tag: C#,Internal,Assembly

Considerazioni su Microsoft Days di Milano

É il secondo evento a cui partecipo (il primo sono stati i Community Days). Devo dire che queste giornate mi piacciono. Ci si incontra, si vedono i mostri sacri delle community e di mamma MS che si aggirano e si mischiano coi poveri mortali e si assiste, spesso, a sessioni molto interessanti. Il giudizio complessivo, forse falsato da questo pregiudizio positivo, non può che essere molto positivo. Cominciamo: devo dire che dopo la keynote vedere arrivare l'autore di questo a parlarci di EF mi ha fatto un attimo saltare sulla sedia. Devo dire che in questo caso ero prevenuto;...

WCF e DataContract condivisi

Una brevissima introduzione: i contratti di servizi WCF scambiano dati col client tramite classi serializzabili. Gli argomenti e i valori di ritorno dei metodi dei servizi potranno quindi essere dei Value Type oppure delle classi decorate, per esempio, con gli attributi DataContract (classi) e DataMember (proprietà dei DataContract). Supponiamo di aver definito una base di servizi contenente due servizi che usano come DataContract alcune classi definite in un altro assembly che potrebbero essere le Entity di EF piuttosto che dei DTO creati ad hoc. Se aggiungiamo una Service Reference alla nostra applicazione, noteremo che all'interno del codice...

Entity Framework ed eliminazioni a cascata

Quando esiste una associazione di tipo master/detail tra due entità con molteplicità (1 a *), è probabile che si voglia definire una regola che, in seguito all'eliminazione di un master, elimini automaticamente tutti suoi i detail. Per farlo è sufficiente impostare la OnDelete action all'interno dell'associazione, nella definizione del modello concettuale <Association Name="FK_VAL_CAMP_TST_CAMP"> <End Role="TST_CAMP" Type="LottiModel.Lotto" Multiplicity="1"> <OnDelete Action="Cascade" /> ...

Eliminare Progetti da TFS

Iniziando ad usare TFS ho creato un paio di progetti di prova per cominciare ad approfondire i concetti relativi a MSF. Avendo smanettato sull'installazione di produzione ho avuto la necessità di rimuovere i progetti dal server. All'interno della cartella "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE" si trova una utility a linea di comando chiamata TFSDeleteProject.exe Per eliminare un progetto è sufficiente eseguire questo comando: TFSDeleteProject /q /server:NomeServer /force "Nome Progetto"   Matteo Technorati Tag: TFS

Entity Framework e vincoli sul mapping

Una cosa che mi piace di Entity Framework è che ti supporta a compile time durante la creazione dei mapping aiutandoti a non crearne di "scorretti" o potenzialmente dannosi. Mi è capitato di creare un Domain a partire da un database molto vecchio e mal concio e devo dire che gli errori di compilazioni mi sono serviti non poco a creare un mapping corretto e funzionante. Una su tutte me la voglio segnare perchè mi ha fatto perdere un po' di tempo. Le chiavi esterne, non essendo associate a dei vincoli di Foreign Key sul DB, mi venivano "tirate...

Entity Framework e gestione della concorrenza

Entity Framework offre un semplice meccanismo per la gestione della concorrenza con un lock ottimistico. Se per esempio si vuole gestire la concorrenza con un campo di tipo Timestamp, basta impostare a Fixed l'attributo ConcurrencyMode sulla property del modello concettuale Mappata su quel campo. In questo modo EF si occupa di eseguire i controlli in fase di modifica e, se necessario, solleva una OptimisticConcurrencyException.   Matteo   Technorati Tag: Enitity Framework,Concorrenza,Optimistic Lock

SQL Server 2008 Management Studio Tip

Ho cominciato ad usare il Management Studio di Sql Server 2008 e mi sono accorto che di default non ti permette di eseguire modifiche alle tabelle che implicano la ricreazione della tabella stessa. Io la ho trovata una opzione alquanto fastidiosa, almeno in fase di definizione della struttura quando le modifiche sono all'ordine del giorno. Comunque per disabilitare questa opzione basta seguire il percorso Strumenti --> Opzioni --> Finestre di Progettazione --> Progettazione tabelle e Progettazione database e dentro a questo finestra deselezionare il check "Impedisci il salvataggio delle modifiche per cui è necessario ricreare la tabella", come visibile nell'immagine...