novembre 2007 Entries

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.

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

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


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);
                       

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");