У меня проблемы с сохранением объекта в базу данных SQL Server 2005. Я использую NHibernate 2.0.0.3002 для моего уровня персистентности. Типичное отображение с целочисленным идентификатором:
<id name="Id" unsaved-value="0">
<column name="Id"/>
<generator class="identity" />
</id>
Для краткости я опустил все остальное. Приложение использует класс репозитория с универсальным методом сохранения следующим образом
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();
}
}
При вызове SaveOrUpdate в сеансе выдается исключение с сообщением «нулевой идентификатор». Когда я проверяю базу данных, строка вставляется со всеми правильными значениями, поэтому я думаю, что проблема в том, что NHibernate пытается установить свойство Id объекта со значением, возвращаемым @@ IDENTITY. Через SQL Profiler я вижу, что вызывается @@ IDENTITY, поэтому не понимаю, почему возникает исключение.
Кто-нибудь еще имел эту проблему?