Posts
83
Comments
165
Trackbacks
11
February 2008 Blog Posts
[NH] Delete...something

Con NH è "molto semplice" gestire il life-cycle di un oggetto, ma a volte nasce l'esigenza di poter effettuare operazioni che esulano dalle semplici CRUD sulla singola entità.

Un esempio semplice è quello che mi è capitato oggi: cancellare, a fronte di una certa operazione dell'utente, tutti i record di una tabella che avevano particolari requisiti.
Che fare? Caricare tutte le entità in questione e poi cancellarle una ad una? naaaaaaaaaaaaaaaaahhhhhhhhhhhhhh!!!

La session di NH mette a disposizione il metodo Delete con quattro overload. Il primo, quello di cui sopra, per l'eliminazione del singolo oggetto. Gli altri tre permettono di specificare una query SQL o HQL per definire quali sono gli elementi che devono essere eliminati.

Per fare un semplice esempio, svuotare la tabella degli utenti:

session.Delete("from User");

Facile no?

posted @ Wednesday, February 27, 2008 10:47 AM | Feedback (0)
[WPF] WPF.Start()

Come per qualunque altra applicazione, anche le applicazioni WPF hanno bisogno di un entry point, ovvero il famoso metodo "Main" decorato con l'attributo [STAThread].

Con WPF abbiamo (almeno) tre modi per poter definire quale deve essere il "punto di ingresso" della nostra applicazione. Tralasciando il tradizionale metodo "lato C#" analiziamo gli altri due modi (molto simili) che XAML ci mette a disposizione:

1. Creo un file EntryPoint.xaml e il relativo EntryPoint.cs e li "lego" tra di loro:

2. Creo un unico file EntryPoint.xaml senza dover necessariamente definire il relativo file EntryPoint.cs

 

NOTA: In entrambi i casi la build action del file xaml deve essere impostata su ApplicationDefinition.

Dando un occhio alla cartella obj del nostro progetto, si nota subito che, in entrambe le soluzioni il compilatore genera un file EntryPoint.g.cs praticamente identico, se non per il fatto che, nel secondo caso, non avendo un corrispondente file C# con un namespace correttamente definito, il compilatore assegna al file creato il namespace XamlGeneratedNamespace.
E' in questo file che viene generato, oltre al metodo InitializeComponent(), il metodo che fungerà da entry point per la nostra applicazione:

Sarà che sono prolisso, sia quando parlo, sia quando scrivo, ma l'idea che il codice deve essere autoesplicativo ha sempre caratterizzato il mio modo di vedere...insomma se devo scegliere, preferisco di gran lunga la prima e più "completa" soluzione.

posted @ Wednesday, February 20, 2008 11:06 PM | Feedback (0)