DanBlog

Il blog di Daniele Armanasco
posts - 48, comments - 73, trackbacks - 10

mercoledì 14 novembre 2007

NHibernate e i trigger di SQL Server

Tentando di aggiornare una entità persistita su una tabella di SQL Server dove è presente un trigger ottengo l'eccezione seguente e l'aggiornamento fallisce:

[NHibernate.AdoNet.TooManyRowsAffectedException] {"Unexpected row count: 2; expected: 1"} NHibernate.AdoNet.TooManyRowsAffectedException

A quanto pare il fatto che il trigger aggiorni un altro record fa sì che il db ritorni 2 come numero di record aggiornati, il che fa pensare ad NH che ci sia stato un errore. Non ho trovato opzioni che dicano a NH di non verificare il numero di record aggiornati; sembra che l'unica soluzione consista nel disabilitare il conteggio dei record modificati nel trigger (impostare SET NOCOUNT ON prima del comando di UPDATE nel trigger e impostare SET NOCOUNT OFF dopo il comando di UPDATE). Non ho trovato altre soluzioni.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (2) | Filed Under [ NHibernate ]

Escape di caratteri speciali

 - stringhe classiche: myString = "prova=\"aaa\"" (uso \)
 - stringhe con @: myString = @"prova=""aaa""" (raddoppio gli apici)

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (1) | Filed Under [ Scoperte di un principiante ]

New line

System.Environment.NewLine OPPURE "/r/n"

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (4) | Filed Under [ Scoperte di un principiante ]

Rimuovere elementi da una Collection su cui devo ciclare


Siccome non posso rimuovere elementi da una collection mentre la sto scorrendo con un ciclo foreach, devo salvare gli elementi da eliminare in una lista temporanea e fare poi un altro ciclo, sulla lista temporanea, per rimuoverli:

IList<Child> childrenToDelete = new List<Child>();                   
foreach (Child child in Father.Children)
{
   if (...)
      childrenToDelete.Add(child);
}
foreach (Child child in childrenToDelete)
   Father.Children.Remove(child);
                       

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (2) | Filed Under [ Scoperte di un principiante ]

Implementare flags mediante operatori bitwise

Innanzitutto dichiaro un enum con la lista dei possibili flag; è importante che l'enum abbia l'attributo [Flags] e che gli elementi della lista abbiano associato un valore che sia potenza di 2 (1, 2, 4, ...). Si possono definire fino a 32 elementi.

[Flags] private enum Buttons : int
{
···Ok = 1, Cancel = 2, Retry = 4, Help = 8
}

Tip: è possibile aggiungere alla enumerazione un elemento "All" così: All = Ok | Cancel | Retry | Help

Attivare più flag: concatenali con l'operatore bitwise "|" (or):
Buttons buttons;
buttons = Buttons.Ok | Buttons.Cancel;


Disattivare un flag: usa l'operatore bitwise "~" (not):
buttons &= ~Buttons.Cancel;

Verificare se un flag è attivo:

Testing to see if a certain flag is set: usa l'operatore bitwise "&" (and):
if ((buttons&Buttons.Ok)==Buttons.Ok)
···Console.WriteLine("Ok");

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (1) | Filed Under [ Scoperte di un principiante ]

Powered by:
Powered By Subtext Powered By ASP.NET