2010-11-23 5 views
2

У меня есть коллекция, которая фильтруется на уровне отображения, чтобы включить мягкое удаление, используя столбец «isDeleted» в базе данных.Обновление коллекций, отфильтрованных в сопоставлении

отображение выглядит следующим образом:

HasMany(x => x.UploadedFiles).Where("IsDeleted = 0") 

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

Есть ли способ заставить «refiltering» без перезагрузки объекта?

ответ

2

Предложение Where в отображении должно фильтровать во время извлечения. Он не используется во время выполнения, поэтому вы не видите, что UploadedFiles выпадает из вашей коллекции, когда вы устанавливаете IsDeleted = true. Я не верю, что можно обновить коллекцию без перезагрузки объекта, которому это принадлежит.

Я бы порекомендовал выразить свое намерение в вашей объектной модели.

private IList<File> uploadedFiles = new List<File(); 
public virtual IEnumerable<File> UploadedFiles { 
    get { 
     return uploadedFiles.Where(x => x.IsDeleted == false); 
    } 
} 

А затем модифицируя отображение для доступа к области подкладочной ...

HasMany(x => x.UploadedFiles) 
    .Access.CamelCaseField() 
    .Where("IsDeleted = 0") 
+0

Свойства «UploadedFiles» в объектной модели NHibernate в виртуальном прибудут посаженное. Вы хотите добавить еще одну собственность (например, NonDeletedUploadedFiles, которая фильтрует по виртуальному свойству? – Variant 2010-11-23 19:01:12

Смежные вопросы