Из того, что я выясняю из вопроса:
- У вас есть сущность к таблице, которая содержит путь к каталогу, где можно найти фотографии.
- Вы хотите иметь список фотографий, которые будут загружены на основе файлов в этом каталоге.
- Вы обнаружите, что каталог может быть #null при попытке загрузить эти фотографии в несопоставленное свойство.
Я подозреваю, что основа c, которую вы написали, должна работать, однако пара важных деталей. Для списка непопечатанных фотографий вам не нужно и не следует использовать установщик. Вместо этого ему просто нужен геттер:
private List<string> _photos = null;
private string _dirPhotos = null;
[Column("dir_fotos")]
public String DirPhotos
{
get { return _dirPhotos; }
set
{
if(string.Compare(_dirPhotos, value, true) != 0)
{
_dirPhotos = value;
_photos = null;
}
}
}
[NotMapped]
public List<String> photos
{
get { return _photos ?? (_photos = GetPhotos(DirPhotos) ); }
}
Здесь важно то, что ваши GetPhotos также начинаются с этого утверждения:
private List<string> GetPhotos(string dirPhotos)
{
if (string.IsNullOrEmpty(dirPhotos))
return new List<string>();
// ... load photos...
}
Ключевые различия здесь:
DirPhotos предоставляется переменная и метод получения / установки. Если Каталог изменяется, мы хотим «сбросить» переменную List, чтобы она могла перезагрузиться при следующем обращении.
Список инициализируется значением #null в качестве значения по умолчанию. Когда вызывается «getter», он проверит, является ли переменная нулевой, и если так, вызовет ваш метод GetPhotos. Как только эта переменная будет установлена, она будет использовать эти загруженные данные до тех пор, пока не изменится каталог.
GetPhotos вернет пустой список, если переданный каталог будет пустым или пустым. Вы также захотите убедиться, что ваш метод GetPhotos утверждает, что любой переданный каталог действителен, и либо выдает исключение, либо возвращает пустой список. Не возвращайте #null, хотя, поскольку мы не хотим встречать исключения с нулевыми ссылками в будущем.
Я считаю, что проблема, с которой вы столкнулись, заключалась в том, что при попытке использовать Setter вы может быть попытка «установить» коллекцию до того, как объект получит возможность загрузить свои данные. С этим шаблоном, когда загрузка происходит на геттере, вы просто загружаете объект как обычно и получаете доступ к DirPhotos после того, как объект был прочитан из DbSet. При первом доступе к DirPhotos будет предпринята попытка загрузить фотографии из файловой системы, но просто убедитесь, что строка объекта может не иметь установленного каталога. (или действительный каталог)