2010-11-23 9 views
2

J'ai une collection qui est filtrée au niveau du mappage pour permettre une suppression en douceur à l'aide d'une colonne "isDeleted" dans la base de données.Rafraîchissement des collections filtrées dans le mappage

La cartographie ressemble à ceci:

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

Quand je tournerai la propriété isDeleted pour certains articles de la collection ne met pas à jour automatiquement pour refléter la suppression jusqu'à ce que je recharge l'entité.

Existe-t-il un moyen de forcer un "refiltering" sans recharger l'entité?

Répondre

2

La clause Where dans le mappage doit filtrer pendant l'extraction. Il n'est pas utilisé lors de l'exécution, ce qui explique pourquoi vous ne voyez pas UploadedFiles quitter votre collection lorsque vous définissez IsDeleted = true. Je ne crois pas qu'il soit possible d'actualiser la collection sans recharger l'entité qui la possède.

Je recommanderais d'exprimer votre intention dans votre modèle d'objet.

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

Et puis en modifiant votre carte pour accéder à votre champ de soutien ...

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

La propriété 'Uploadedfiles de dans le modèle d'objet est get-jeu virtuel de NHibernate. Voulez-vous ajouter une autre propriété (par exemple, NonDeletedUploadedFiles qui filtre sur la propriété virtuelle?) – Variant

+1

J'ai supposé que UploadedFiles est une collection d'objets.Je suggère d'avoir un champ de support explicite et de dire à NHibernate de mapper au champ de sauvegarde (comme montré ci-dessus.) Votre propriété UploadedFiles utiliserait alors LINQ-to-Objects pour filtrer les fichiers supprimés. –

Questions connexes