2010-05-13 4 views
0

Cette requête fonctionne très bien:Castle ActiveRecord ne parvient pas à détecter champ DAO dans certaines requêtes

DetachedCriteria filter = DetachedCriteria 
          .For(typeof(NotificationRecord), "nr") 
          .Add(Expression.Eq("nr.Submission.Id", 5)); 

return ActiveRecordMediator<NotificationRecord>.FindAll(filter); 

Cette requête échoue avec le message d'exception: could not resolve property: Submission.IsScheduledForNotification of: NotificationRecord

DetachedCriteria filter = DetachedCriteria 
          .For(typeof(NotificationRecord), "nr") 
          .Add(Expression.Eq("nr.Submission.IsScheduledForNotification", true)); 

return ActiveRecordMediator<NotificationRecord>.FindAll(filter); 

Pour assurer ActiveRecord reconnaît IsScheduledForNotification, je une simple requête sur l'objet réel Submission en utilisant le IsScheduledForNotification comme filtre comme ça et cela fonctionne

ActiveRecordMediator<Submission>.Exists(Expression.Eq("IsScheduledForNotification", true)); 

Quelqu'un peut-il dire pourquoi cela devrait se produire?

Répondre

1

Utilisez CreateAlias() pour indiquer l'entité jointe, .: par exemple

DetachedCriteria 
.For(typeof(NotificationRecord), "nr") 
.CreateAlias("nr.Submission", "s") 
.Add(Expression.Eq("s.IsScheduledForNotification", true)); 

Vous n'avez pas besoin de cela pour la requête nr.Submission.Id parce qu'il n'y est pas rejoindre là-bas.

Questions connexes