NHibernate - как сохранить объект с предложением where

StackOverflow https://stackoverflow.com/questions/347372

  •  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, чтобы они не были сохранены.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top