NHibernate - как сохранить объект с предложением where
-
19-08-2019 - |
Вопрос
Я не знаю, как сохранить объект с предложением where. Мне нужно, чтобы предотвратить сохранение объекта с диапазоном дат, перекрывающихся с другими.
public class TaskEvent
{
public DateTime StartDate {get;set;}
public DateTime EndDate {get;set;}
}
Я хочу проверить совпадение критериев в операции сохранения, но не знаю как.
Есть идеи?
Решение
Вы можете использовать HQL для специальных запросов на обновление
session.CreateQuery("UPDATE TaskEvent SET ... WHERE ID = :ID and ...")
.SetInt32("ID", ID)
//.SetDateTime("", )
//.SetDateTime("", )
.ExecuteUpdate();
или сделать более NHibernate-способом ... получить требуемые TaskEvents (предложение where), обновить их свойства и зафиксировать транзакцию.
Другие советы
Вам нужно выяснить в коде, какие объекты нужно сохранить, а затем сохранить их. Это бизнес-логика, и ее не следует вводить в постоянные операции. ИМО, даже если бы NH мог это поддержать. Р>
Один из подходов состоит в том, чтобы определить, какие объекты TaskEvent вы не хотите сохранять в коде, и исключить их из ISession, чтобы они не были сохранены. Р>