Как я называю хранимую процедуру от NHibernate, который не имеет никакого результата?

Ваше самое важное требование должно "проверить если измененное содержание".

, Если это самый важный, что ЛЮБОЕ изменение в файле быть обнаруженным, MD-5, SHA-1 или даже SHA-256 должно быть Вашим выбором.

, Учитывая, что Вы указали, что контрольная сумма НЕ быть криптографически хорошим, я рекомендую CRC-32 по трем причинам. CRC-32 дает хорошие расстояния Хемминга по 8K файлу. CRC-32 будет, по крайней мере, порядком величины быстрее, чем MD-5 для вычисления (второе требование). Иногда как важный, CRC-32 только требует, чтобы 32 бита сохранили значение, которое будет сравнено. MD-5 требует 4 раза устройства хранения данных, и SHA-1 требует 5 раз устройства хранения данных.

BTW, любая техника будет усилена путем предварительного ожидания длины файла при вычислении хеша.

31
задан Michael 19 June 2014 в 15:29
поделиться

3 ответа

Кажется, это ограничение NHibernate, из Документация NHibernate :

Процедура должна вернуть набор результатов. NHibernate будет использовать IDbCommand.ExecuteReader () для получения результатов.

15
ответ дан 27 November 2019 в 21:38
поделиться

NHibernate позволяет вам заниматься объектно-ориентированным программированием и заботится об извлечении объектов и сохранении объектов в базе данных за кулисами.

NHibernate не предоставляет вам простой API для простого выполнения хранимых процедур, потому что это, похоже, не имеет ничего общего с объектно-ориентированным программированием, будь то выборка объектов или их сохранение.

Итак, вы делаете что-то в корне неверное, пытаясь использовать NHibernate напрямую для выполнения процедурных процедур. код. Если вы хотите использовать NHibernate, вы должны сказать ему, как выполнение этой хранимой процедуры за кулисами волшебным образом поможет в извлечении объектов из базы данных и сохранении объектов в ней.

Вы можете:

  • Использовать ADO.NET напрямую, открывая новый IDbConnection или получение ISession ' s соединение, создание IDbCommand и т. д. Сделайте это, если вам нужен одноразовый подход к выполнению хранимых процедур.
  • Создайте прослушиватель NHibernate и настройте его в конфигурации , для выполнения этой хранимой процедуры, когда некоторые другие события отправляются через конвейер NHibernate. Делайте это только в том случае, если эта хранимая процедура действительно должна выполняться каждый раз и только при возникновении этих событий.
12
ответ дан 27 November 2019 в 21:38
поделиться

ExecuteUpdate on SQL Query должен вам помочь.

Пример:

ISession session = ....
IQuery query = session.CreateSQLQuery("exec LogData @Time=:time, @Data=:data");
query.SetDateTime("time", time);
query.SetString("data", data);
query.ExecuteUpdate();
54
ответ дан 27 November 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: