У меня возникли проблемы с сохранением объекта в базе данных SQL Server 2005. Я использую NHibernate 2.0.0.3002 для моего уровня сохранения. Отображение является типичным с идентификатором целого числа, следующим образом:Исключение NHibernate «null identifier» после вставки объекта
<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 вызывается, поэтому я не понимаю, почему выбрано исключение.
У кого-нибудь еще была эта проблема?
Можете ли вы показать код, который выполняет фактическое сохранение/обновление и когда вы пытаетесь использовать этот идентификатор? –
Я добавил код в соответствии с запросом. – gilles27
Какая версия NHibernate вы бежите кстати? –