COLCAZZOCHEFUNZIONA
mi trovo a scrivere un altro bel Post.Lavorando in ambienti eterogenei e integrando procedure già in essere si trovano sempre mille eccezioni da gestire! Nel mio caso dopo aver scapocciato (Famoso termine informatico!!) con entity frame della Microsoft e dopo aver scelto immediatamente Nhibernate, mi sono trovato di fronte ad altri mille piccoli problemi!!! (La povera esistenza dell'informatico)
Premessa:
ho voluto mappare un db esistente su sqlserver su Nhibernate, tale db ha svariate stored procedure e trigger, per esempio all'insert su una tabella scatta un trigger che fa insert su altre N tabelle...
Bella trovata no?

NHibernate.AdoNet.TooManyRowsA
Cerchiamo di rimanere calmi e vediamo come ragiona Nhibernate e perché da eccezione:
Nhibernate, segue questo processo: se io sto inserendo una nuova riga in una tabella e sto inserendo in questa tabella una chiave primaria, si aspetta che ci sia solo una riga inserita, perché la chiave primaria di solito è univoca e per cui non potrebbe essere altrimenti, se ci fossero piu righe con la stessa chiave primaria, ci sarebbe un bel errore, o di progettazione o del motore sql.

Ovviamente chi mi legge è curioso, oppure potrebbe avere avuto il mio stesso problema ed voler sapere conoscere come ho risolto il mio problema.
Io propongo tre vie:
- The attach this practice
- The dirty practice
- The good pratice

La prima è semplice, efficace, e consiste nell'attaccarsi a .... e cambiare progetto o cambiare lavoro!
[
La seconda è la pratica brutale, nel senso che grazie al costrutto, (che tutti conosciamo) try catch
![]() |
L'immagine associata alla soluzione è stata censurata |

Terza via è quella di riscrivere i trigger, poichè ogni trigger puo essere riscritto in modo che dopo essere partito non alteri il row count di MS SQL server.
Come ? ecco il comando:
SET NOCOUNT { ON | OFF }
ovviamente nel nostro caso è da mettere a OFF!
Vorrete sapere quale scelta è stata fatta per il mio progetto?
Ovviamente deve rimanere una curiosità!