Фотографии и база данных - PullRequest
2 голосов
/ 25 июня 2009

Я работаю над сайтом, где пользователь может загружать фотографии товара, который он хочет рекламировать. Я сохраняю фотографии в папке в Интернете. В таблице, где я храню ссылки на фотографии, есть ключевое поле photoid, которое представляет собой поле Identity (первичный ключ).

Мой репозиторий имеет следующие методы

Photo photo = rep.NewPhoto();
photo.Title="Some Title";
rep.InsertPhoto(photo); 
rep.SaveAll();

rep.SavePhoto(photo,uploadedPhoto);
rep.SaveAll();

Я использую Linq to SQL для своей модели данных. Теперь моя проблема, если я хочу сохранить свои файлы с именем, которое исходит от photoid, я должен вызвать rep.SaveAll () метод, чтобы получить новый созданный фотоид, а затем сохранить фотографию с новым идентификатором а затем я должен вызвать метод SaveAll (), чтобы обновить его снова с изменениями произошло в методе SavePhoto ().

Другой вариант - сначала сохранить файл с произвольным номером, а затем сохранить запись фотографии за один шаг.

Это второй подход.

Photo photo = rep.NewPhoto();
photo.Title="Some Title";
string filename = rep.SavePhoto(uploadedPhoto);
photo.FileName=filename;
rep.InsertPhoto(photo); 
rep.SaveAll();

У сохранения файлов с помощью photoid есть один хороший момент, фотографии можно легко загрузить с помощью его идентификатора.

Какой хороший подход для достижения такого рода функциональности.

Помощь будет признательна.

Приветствие Парминдер

Ответы [ 3 ]

2 голосов
/ 25 июня 2009

Второй подход определенно более эффективен; Другим вариантом может быть создание уникального на уровне приложения (вы можете использовать направляющие), а затем использовать его в качестве ключевой записи БД и так же, как имя файла.

2 голосов
/ 25 июня 2009

Если вы используете последнюю версию SQL Server, вы можете захотеть взглянуть на новый тип поля FILESTREAM:

http://technet.microsoft.com/en-us/library/bb933993.aspx

Именно для такого рода вещей - попытка вывести большие капли из структуры таблицы на файловую систему.

Кроме этого, я думаю, у вас есть правильная идея в любом направлении - если вам нужно два сохранения, вы можете рассмотреть транзакцию, если вам небезразлично, что произойдет, если произойдет сбой второго сохранения или SavePhoto.

0 голосов
/ 25 июня 2009

Пара вещей:

1) Рассмотрите возможность хранения фотографий как VARBINARY (MAX) в базе данных. Людям будет намного проще управлять резервным копированием и восстановлением, и это будет лучше для целостности вашей базы данных.

2) Подумайте об использовании частичных методов вашего класса L2SQL Photo, чтобы добиться того, чего вы хотите. Вы должны иметь возможность изменить метод обновления вашего класса Photo, чтобы сохранить вашу фотографию. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...