Я пытаюсь сохранить / сохранить изображение в базе данных 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 поддерживает эти типы данных .В этом сравнении между 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.
Редактировать:
Я нашел сообщение о выпуске EF 4.1.Он имеет следующее:
Изменение длины по умолчанию для неключевой строки и двоичных столбцов с '128' до 'Макс.'SQL Compact не поддерживает столбцы «Max», при работе с SQL Compact дополнительное соглашение Code First установит длину по умолчанию 4000. Более подробная информация об изменениях включена в недавнее сообщение в блоге ( ссылка ниже ).
Хорошо, хорошо ... единственный способ, которым я мог заставить его работать, - это выполнить то, что описано здесь , то есть установить DbContext.Configuration.ValidateOnSaveEnabled = false
.Это обходной путь, как предполагает этот пост.