2009-12-27 5 views
1

J'utilise Active Record avec ActiveRecord Facility, et j'essaie d'utiliser une requête NHibernate personnalisée. Ai-je besoin de définir un mappage pour une classe même si elle étend ActiveRecordBase et possède l'attribut ActiveRecord?"Table non mappée" avec NHibernate + Active Record

[ActiveRecord("VotesOnQuestions")] 
public class VoteOnQuestion : ActiveRecordBase<VoteOnQuestion> 
{ 
    [CompositeKey] 
    public VoteKey Key { get; set; } 

    [Property] 
    public VoteType Vote { get; set; } 
} 

Je suis en train de créer la requête suivante:

session.CreateQuery("SELECT vote, COUNT(*) FROM votesonquestions" + 
        " WHERE questionid = :questionId GROUP BY vote"); 

Mais je reçois cette exception:

"votesonquestions ne sont pas mises en correspondance"

+1

avez-vous une classe "votesonquestions"? vous en avez besoin. –

+0

J'en ai un, j'ai édité ma réponse pour l'inclure. – ripper234

+0

La classe est nommée ** VoteOnQuestion **, la requête indique ** votesonquestions ** (note case et extra * s *). –

Répondre

2

Tout comme l'exception l'indique, vous avez besoin d'une classe marquée [ActiveRecord] qui correspond au votesonquestions (Je suppose que ça s'appelle comme ça) table. L'héritage de ActiveRecordBase est facultatif.

Dans la requête, vous pouvez uniquement référencer des classes mappées (qui sont sensibles à la casse), et non des tables. Donc dans ce cas, la requête devrait être:

session.CreateQuery("SELECT vote, COUNT(*) FROM VoteOnQuestion" + 
        " WHERE questionid = :questionId GROUP BY vote"); 
Questions connexes