2010-12-04 4 views
1

J'essaie de créer une association pour charger une liste d'objets parents basée sur un champ de date d'objet enfant. Je ne veux que des objets parents où la date est> = une date donnée.NHibernate CreateCriteria ne fonctionne pas correctement avec l'association et les dates

Le problème est que lorsque j'utilise la date d'aujourd'hui ou la veille, elle renvoie les bons enfants. Mais si j'utilise une date plus éloignée dans le temps, comme 11-2-2010, cela inclut les enfants qui ont une date < 11-2-2010.

Voici le code:

public IList<Parent> GetByDate(string parentId, DateTime date) { 
    IList<Parent> list = null; 
    using (ISession session = SessionFactory.OpenSession()) { 
    list = session.CreateCriteria(typeof(Parent)) 
         .Add(Expression.Eq("parent_id", parentId)) 
         .CreateCriteria("children") 
         .Add(Expression.Gt("end_date", date)).List<Parent>(); 
    } 
    return list; 
} 

et la mise en correspondance des parents:

<id name="id"> 
    <generator class="native"/> 
</id> 

<property name="parent_id" /> 

<bag name="children" lazy="false"> 
    <key column="parent_id" /> 
    <one-to-many class="Child" /> 
</bag> 

Merci à l'avance!

Répondre

1

Ajout des restrictions aux critères seront pas affecter ce que les enfants sont chargés, que ce que les parents (qui n'a pas de sens dans votre cas, parce que vous avez déjà un parentId, utilisez ISession.Get)

Si vous avez besoin Pour filtrer la collection enfant, utilisez ISession.CreateFilter.

Exemple:

var parent = session.Get<Parent>(parentId); 
var children = session.CreateFilter(parent.children, "where end_date > :date") 
         .SetParameter("date", date) 
         .List<Children>(); 

Cela suppose la propriété que vous le filtrage sur est appelé date_fin, qui ne suit pas les conventions de nommage .Net, mais est ce que vous avez écrit.

+0

est-ce que vous pouvez donner un exemple en utilisant mon code \ mapping? Je pense que je comprends ce que vous dites, mais un exemple serait kewl. – chipman

Questions connexes