Как и большинство (если не все) провайдеров LINQ, LINQ to NHibernate полезна только для чтения данных.
Чтобы достичь того, что вы хотите сделать в NHibernate с помощью LINQ, вам нужно получить все соответствующие объекты и обновить каждый. Что-то вроде:
//NHibernate session initialisation & finalisation skipped for brevity
var relevantObjects = from i in session.Linq<SomeObject>()
where i.SomeInteger > notSoMagicNumber
select i;
foreach (SomeObject item in relevantObjects)
{
i.SomeInteger++;
session.Update(item);
}
Убедитесь, что вы очистили свой сеанс после всего этого и завернули все в транзакцию, чтобы минимизировать количество обновлений базы данных.
Все это говорит о том, что в зависимости от размера ваших данных вы можете столкнуться с проблемами производительности при использовании NHibernate для массовых операций. Использование IStatelessSession
может помочь для этой цели, но я сам не пробовал.
ОБНОВЛЕНИЕ Оказывается, если вы завершили его в транзакции, вам не нужно делать session.Update
или очищать сеанс.