Я пытаюсь сохранить/сохранить изображение в базе данных SQL Compact Edition (CE).
Я объявляю это поле в моей модели Student следующим образом:
[Column(TypeName = "image")]
public byte[] Photo { get; set; }
База данных создается с типом данных изображения для столбца Фото, как показано здесь:
Проблема заключается в следующем:
Когда я запускаю приложение и пытаюсь сохранить Студент с фотографией 3 МБ (например), я получаю исключение:
validationError.ErrorMessage = "The field Photo must be a string or array type
with a maximum length of '4000'."
SQL Server CE поддерживает эти Типы данных. В этом comparison между SQL Express и SQL Compact Edition (CE) мы имеем, что SQL CE поддерживает двоичное (BLOB) хранилище с использованием изображения тип данных.
Изображение= двоичные данные переменной длины с максимальной длиной 2 ^ 30-1 (1 073 741 823) байт. Хранение - это длина значения в байтах.
Изображение должно выполнять работу, я думаю.
Что я здесь делаю неправильно? Это ошибка?
Примечание:
Я также пробовал аннотацию данных MaxLength:
[Column(TypeName = "image")]
[MaxLength(int.MaxValue)]
public byte[] Photo { get; set; }
но я получаю это исключение:
Binary column with MaxLength greater than 8000 is not supported.
Edit:
Я нашел сообщение о выпуске EF 4.1. Он имеет следующее:
Изменение длины по умолчанию для не-ключа строковые и двоичные столбцы из '128 до 'Макс. SQL Compact не поддерживает Максимальные столбцы при работе против SQL Compact дополнительный код сначала соглашение будет устанавливать длину по умолчанию из 4000. Более подробная информация о изменение, внесенное в недавний блог post (ниже).
Хорошо, хорошо... единственный способ заставить его работать - это сделать то, что описано здесь, то есть установить DbContext.Configuration.ValidateOnSaveEnabled = false
, Это обходное решение, как предполагает сообщение.