Сохранять файлы в базе данных с помощью сущности

У меня есть решение ASP.NET MVC, построенное на платформе Entity Framework с Microsoft SQL Server 2008. Мне нужно создать функцию, которая позволяет моим пользователям загружать файлы.

Я бы хотел:

  • Решение, использующее Entity Framework для хранения файлов в базе данных
  • Решение, которое обнаруживает и предотвращает загрузку одного и того же файла дважды с помощью какого-либо хеша/контрольной суммы
  • Советы по созданию базы данных/таблиц.

Ответы

Ответ 1

"Правильный" способ хранения файла в базе данных SQL Server 2008 - использовать тип данных FILESTREAM. Я не знаю, что поддерживает Entity Framework, но вы можете попробовать и посмотреть, что произойдет.

Тем не менее, большую часть времени, когда люди делают это, они не хранят файл в базе данных. Это означает, что вам нужно пройти через ASP.NET и сервер базы данных, чтобы обслуживать файл, который вы могли бы обслуживать непосредственно с веб-сервера. Это также может несколько усложнить резервное изображение для вашей базы данных и сайта. Поэтому, когда мы загружаем файлы в нашу MVC/Entity Framework, мы сохраняем только ссылку на местоположение файла в базе данных и сохраняем файл в другом месте.

Очевидно, какая стратегия правильная для вас, во многом зависит от особенностей вашего приложения.

Ответ 2

В вашей модели сущности сопоставьте столбцу базы данных BLOB с атрибутом byte[]. Назначьте содержимое загруженного файла этому свойству объекта сущности и сохраните изменения в ObjectContext.

Чтобы вычислить хэш, вы можете использовать MD5CryptoServiceProvider класс

Ответ 3

Вот как я это делаю для подкастов:

ID     Title         Path                    Summary              UploadDate
---    -----        --------              ----------------        -----------
1     TestPodcast   /Podcasts/ep1.mp3      A test podcast         2010-02-12

В path хранится ссылка на физическое местоположение подкаста. Я использовал сообщение от Скотта Хансельмана о Загрузка файлов с помощью ASP.NET MVC для работы с частью загрузки файла.