Кто-то из нашей команды по обработке данных добавил ограничение базы данных, и, хотя оно вполне допустимо и желательно, оно создает большие проблемы для NHibernate, потому что, похоже, нет способа переопределить порядок сохранения NHibernate.
Учитывая (глупый пример) класс, подобный этому:
public Person
{
public virtual string FirstName { get; set; }
public virtual bool IsCurrent { get; set; }
}
и ограничение на то, что только одна запись в вспомогательной таблице может быть IsCurrent=true
одновременно. , .
Если я попытаюсь «объявить устаревшим» существующую запись, установив IsCurrent=false
, и заменить ее новой записью на IsCurrent=true
, я получу исключение ADO при сохранении, поскольку NHibernate сначала пытается выполнить вставку, нарушая SQL Ограничение сервера, что только одна запись может быть IsCurrent=true
одновременно.
Я вижу два варианта:
- Можно ли настроить SQL Server для проверки ограничений только в конце транзакции? Следующее утверждение («обновление» старой строки до
IsCurrent=false
приведет к снятию ограничения.
- Может ли порядок сохранения NHibernate (для экземпляров того же типа) быть
модифицировали или «намекнули» каким-либо образом?
Спасибо!
Джефф