Ho problemi a salvare un'entità in un database di SQL Server 2005. Sto usando NHibernate 2.0.0.3002 per il mio livello di persistenza. La mappatura è tipica, con un ID intero, come segueErrore di "null identificativo" di NHibernate dopo l'inserimento di un'entità
<id name="Id" unsaved-value="0">
<column name="Id"/>
<generator class="identity" />
</id>
Ho omesso il resto per brevità. L'applicazione utilizza una classe repository con un metodo save generico come segue
public void Save(T toSave)
{
Save(new T[] { toSave });
}
public void Save(IEnumerable<T> toSave)
{
using (ISession session = SessionFactory.OpenSession())
{
foreach (T item in toSave)
{
session.SaveOrUpdate(item);
}
session.Flush();
}
}
Quando si chiama SaveOrUpdate sulla sessione, viene generata un'eccezione con un messaggio di "identificatore nullo". Quando controllo il database, la riga è stata inserita con tutti i valori corretti, quindi penso che il problema si verifichi quando NHibernate tenta di impostare la proprietà Id dell'entità con il valore restituito da @@ IDENTITY. Posso vedere attraverso SQL Profiler che @@ IDENTITY viene chiamato così non capisco perché l'eccezione è lanciata.
Qualcun altro ha avuto questo problema?
È possibile visualizzare il codice che salva/aggiorna effettivamente e quando si tenta di utilizzare tale ID? –
Ho aggiunto il codice come richiesto. – gilles27
Quale versione di NHibernate stai usando btw? –