Добрый день. Схема содержит поле типа "Двоичные данные", вложение анкеты клиента. Конструирую запрос 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 или тип бинарного объекта "Двоичные данные", и для сохранения файлов используется что-то другое ?
Нравится
Стандартно в системе для работы с файлами, хранящимися в блобах, используют специальные сервисы FileApiService для загрузки на сервер и FileServices для скачивания с сервера. Они вызывают функции из FileRepository, а там — из схем FileLoader и FileUploader, где и идёт непосредственная работа со значением. Последняя пишет в поле при помощи кода:
DBLobUtilities.AppendBlob(UserConnection, fileUploadInfo.EntitySchemaName, fileUploadInfo.ColumnName, fileUploadInfo.FileId, fileUploadInfo.Content);
Более подробно реализацию можно посмотреть в упомянутых выше схемах.