2014-09-11 2 views

ответ

0

Пожалуйста, проверьте следующее:

привел фрагмент кода:

ISession session = sessionFactory.OpenSession(); 
ITransaction tx = session.BeginTransaction(); 
string hqlVersionedUpdate = "update versioned Customer set name = :newName where name = :oldName"; 
int updatedEntities = s.CreateQuery(hqlUpdate) 
     .SetString("newName", newName) 
     .SetString("oldName", oldName) 
     .ExecuteUpdate(); 
tx.Commit(); 
session.Close(); 

Итак, таким образом, мы можем defin UPDATE с HQL (с помощью нашей модели предметной области) и одновременное выполнение udpate на стороне БД

Примечание: для более подробной информации также проверить этот блог: NHibernate – Executable DML по Ayende

+0

Я не вижу команду «Top» здесь, мне нужно обновить Juste 5 элементов, я знаю, что могу сделать ExecuteSqlQuery, но потом я вам нужно проверить DataProvider, потому что команда Top является специфичной для T-sql, в MySql мы используем Limit, мне бы понравилось, что Nhibernate генерирует конкретный запрос для меня, чтобы он работал на всех поставщиков данных. – user2425133

+0

Я бы сказал, мы можем это иметь! ;) Проверьте эту строку в документе: * «... Подзапросы могут использоваться в предложении where, сами подзапросы могут содержать объединения ...» * используйте некоторые ТОП-5 запросов (подзапрос) для возврата набор идентификаторов для обновления ... и затем используйте DML! ;) мощный NHibernate - проверьте http://nhforge.org/doc/nh/en/index.html#queryhql-subqueries –

+0

Большое спасибо! Я поставлю его в транзакцию для обеспечения безопасности, один запрос HQL может (или не может) выдавать много запросов sql (например, если мы запрашиваем не-сопоставленный базовый класс). – user2425133