2010-09-23 4 views
2

J'utilise une clause Where dans mes applications de FluentNHibernate comme suit:FluentNHibernate clause Where ne semble pas être utilisé lors du remplissage des collections

public class FooMap : ClassMap<Foo> 
{ 
    public FooMap() 
    { 
    Table("MySchema.Foos"); 
    Where("Deleted = 0"); 
    etc etc 
    } 
} 

Cette clause where se joint en annexe à SQL lorsque je charge les instances de Foo individuelles par session.Load<Foo>(1) et quand j'utilise des requêtes LINQ. Cependant, si une autre classe a une collection de Foos et que je parcoure la collection, le SQL généré pour charger les Foos ne contient PAS la clause where.

Est-ce un bug dans FluentNHibernate, ou NHibernate en général? Ou est-ce que je fais quelque chose de mal? Ou est-ce (shudder) une «fonctionnalité»?

+0

Pourquoi personne ne répond à cette question? A-t-il besoin de clarification? De plus amples informations sont-elles requises? – David

Répondre

0

C'est un fait, je ne sais pas si c'est un bug, une fonctionnalité ou une fonctionnalité manquante. J'ai rencontré le même problème avec une base de données héritée, même si la mienne avait une relation plusieurs-à-un (une table de recherche "dieu").

Je pense que la justification est qu'une fois que la relation de clé étrangère a été établie, alors la clause where n'a aucune signification. Pour les tables de suppression logicielle, examinez l'utilisation de filtres ou (ma préférence) mappez vers une vue qui filtre les enregistrements supprimés, en supposant qu'ils n'ont pas besoin d'apparaître dans l'interface utilisateur.

+0

Merci pour votre réponse. Je n'ai pas regardé dans les filtres et je ne savais pas que vous pouviez mapper à une vue - je vais jeter un coup d'oeil! Merci. – David