Я использую класс SchemaExport в NHibernate для создания базы данных из файлов .hbm.xml. Есть ли способ установить Identity Seed на моих таблицах на 0, а не на 1? Для таблиц ссылок я предпочитаю, чтобы все идентификаторы исходного статуса были равны 0, и я не хочу, чтобы мне приходилось сбрасывать это значение каждый раз, когда я регенерирую свою БД в режиме разработки. Я использую SQL Server 2005, NHibernate версии 1.2.1.
Установите для Identity Seed значение 0 с помощью NHibernate SchemaExport
Ответы (1)
По возможности лучше НЕ использовать столбцы Identity с NHibernate; Они заставляют NHibernate делать больше обращений к базе данных, делать пакетирование невозможным и, по сути, нарушать шаблон Unit of Work. Это обсуждается на nhibernate.info и в нескольких сообщения в блоге, подобные этой. Guid.comb или Hi-Lo обычно лучше.
Если вы действительно хотите продолжать использовать Identity и иметь начальное значение с 0, то вот некоторые возможности (не проверены).
Просто предположение, но вам, вероятно, сначала нужно установить свой unsaved-value="-1"
следующим образом:
Это позволяет NHibernate знать, что идентификатор -1 означает, что объект не сохранен (временный).
Вам также необходимо убедиться, что все идентификаторы Entities также имеют значение по умолчанию -1 (числа, очевидно, по умолчанию равны 0):
public class Order {
public virtual long Id{get; private set;}
public Order(){
Id = -1;
}
}
Это довольно противно! Затем нужно выяснить, как получить SchemaExport для начального значения из 0. Он может это уже сделать (используя несохраненное значение +1 в качестве начального значения)? Проверьте, работает ли это. В противном случае вам может потребоваться исправить его или переопределить hbm.xml. Один из способов - использовать XSLT для преобразования сгенерированных файлов HBM. Опять же, довольно противно.