Пусть NHibernate прозрачно хранит байтовый массив в файловой системе или S3 - PullRequest
2 голосов
/ 11 января 2011

Я хотел бы иметь возможность прозрачно хранить байтовый массив или поток в объекте на диск (или S3 или что-то еще) вместо БД (и, конечно, читать его обратно, когда запрашивается свойство), но яне могу найти документацию или примеры, которые делают что-то подобное.Является ли это возможным?Любой намек на то, как это может быть реализовано?IUserType?IEntityPersister?

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Проверить другую тему .

IUserType и / или IEntityPersister определяют, как обрабатывать часть сущности и / или целостность сущности при загрузке / вставке / обновлении / удалении.

В вашем случае вы должны определить более низкий уровень абстракции ORM - напишите реализацию NHibernate.Dialect.Dialect, NHibernate.Connection.IConnectionProvider и NHibernate.Driver.IDriver. После этого вы получаете полный контроль над сохраняющимися объектами NHibernate.

Или, если ваши потребности намного проще и вам просто нужно каким-то образом скопировать сохраненные данные на диск, сохранив их в базе данных, вы можете просто подключить слушателей к процессу загрузки / сохранения NHibernate. Проверьте пространство имен NHibernate.Event (IAutoFlushEventListener, IMergeEventListener, IPersistEventListener и т. Д ...). Пример использования: здесь .

0 голосов
/ 11 января 2011

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

Сохранение сущностей может потребовать много усилий для написания и получения правильных результатов, поскольку документация для этого механизма расширяемости (N) Hibernate невелика.Они очень ориентированы на реляционные базы данных, хотя могут использоваться для доступа к другим механизмам хранения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...