Добрый день. Схема содержит поле типа "Двоичные данные",  вложение анкеты клиента. Конструирую запрос DataService InsertQuery добавления вложения byte[] AttachDoc из массива вложений pProfile.Attachments. 

...

InsertQuery insertQuery = new InsertQuery()

            {

                RootSchemaName = "StnProfileAttachment",

                ColumnValues = new ColumnValues()

            };

            insertQuery.ColumnValues.Items = new Dictionary();

...

insertQuery.ColumnValues.Items.Add("MngAttachment", new ColumnExpression

            {

                ExpressionType = EntitySchemaQueryExpressionType.Parameter,

                Parameter = new Parameter

                {

                    Value = pProfile.Attachments[pIndex].AttachDoc,

                    DataValueType = DataValueType.Blob

                }

            });

При тестировании заполняю AttachDoc бинарными данными, сериализую объект insertQuery в json и вкладываю в тело запроса POST http://localhost/0/DataService/json/reply/InsertQuery.

Получаю ошибку 500

    ErrorCode": "NullReferenceException",

    "Message": "Ссылка на объект не указывает на экземпляр объекта.",

 

Возможно указал неправильный тип DataValueType.Blob или тип бинарного объекта "Двоичные данные", и для сохранения файлов используется что-то другое ?

Нравится

1 комментарий

Стандартно в системе для работы с файлами, хранящимися в блобах, используют специальные сервисы FileApiService для загрузки на сервер и FileServices для скачивания с сервера. Они вызывают функции из FileRepository, а там — из схем FileLoader и FileUploader, где и идёт непосредственная работа со значением. Последняя пишет в поле при помощи кода:

DBLobUtilities.AppendBlob(UserConnection, fileUploadInfo.EntitySchemaName, fileUploadInfo.ColumnName, fileUploadInfo.FileId, fileUploadInfo.Content);

Более подробно реализацию можно посмотреть в упомянутых выше схемах.

Показать все комментарии