Вы пытаетесь сохранить GUI- / Drawing-Object из WindowForms / WPF (System.Drawing.Bitmap-Object). Однако это не работает. Причина в том, что GUI-класс (Winforms, WPF и т. Д.) Часто содержит ссылки на базовую систему рисования, как собственные дескрипторы ресурсов ОС. И они не могут быть правильно сериализованы. В таких случаях вы создаете класс, который представляет изображение. Этот класс содержит представление изображения. Обычно это BLOB-объект, в котором хранится изображение.
Существует два основных способа обработки BLOB-объектов. Либо вы храните большой двоичный объект в виде байтового массива в базе данных, либо используете специальный тип db4o-Blob. Оба имеют свои преимущества.
Преимущества / недостатки с байтовым массивом:
- BLOB-объекты находятся в файле базы данных db4o. Так что есть только один файл для копирования.
- Байт-массивы являются частью обычной db4o-транзакции и ведут себя, как и ожидалось.
- При хранении больших двоичных объектов вы можете столкнуться с ограничением размера базы данных db4o . (256 ГБ)
Преимущества / недостатки с db4o-blob
- Капли хранятся как обычные файлы вне базы данных. Это сохраняет базу данных маленькой. Кроме того, вы можете получить доступ ко всем сохраненным BLOB-объектам с помощью обычного приложения.
- Вам всегда нужно копировать каталог blob и базу данных.
- db4o-blob работает вне транзакции db4o. Это означает, что db4o-blob ведет себя не так, как любой другой хранимый объект (а API немного странный). Однако это позволяет получить блоб db4o, не блокируя текущую транзакцию.
Для вашего случая я бы сохранил массив byte [] с картинкой в классе Person. Или вы создаете специальный Image-класс. Этот класс изображений содержит байтовый массив с изображением. И несколько методов для преобразования этого байтового массива из и в Winforms-bitmap.