2010-07-04 4 views
1

J'utilise NHibernate avec Fluent, et je suis en train de faire une chose de type GetAll utilisant Critera.List:NHibernate: obtention de "nom de colonne" ID "invalide." quand j'utilise Criteria.List

public static List<T> GetAll(int pageIndex, int pageSize) 
    { 
     using (ISession session = Utils.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       ICriteria criteria = session.CreateCriteria(typeof(T)); 
       criteria.SetFirstResult(pageIndex * pageSize); 
       if (pageSize > 0) 
       { 
        criteria.SetMaxResults(pageSize); 
       } 
       return criteria.List<T>() as List<T>; 
      } 
     } 
    } 

Ma carte ressemble à ceci:

public class GenreMap: ClassMap<Genre> 
{ 
    public GenreMap() 
    { 
     Table("Genres"); 
     Id(x => x.ID); 
      //.GeneratedBy.Identity(); 
     Map(x => x.Name, "GenreName") 
      .Length(1000); 
    } 
} 

Le PK/ID sous-jacent est GenreID (pas ID), mais j'ai mis la carte correctement (ou du moins je crois).

Alors, pourquoi ai-je cette erreur?

+0

'retour criteria.List () comme une liste ,' lol .... Que diriez-vous 'retour criteria.List (), qui était' – dotjoe

Répondre

2

Vous devez mettre le nom de colonne pour l'ID dans la carte:

Id(x => x.ID, "GenreID"); 

Sinon NHibernate penseront le nom de colonne est le même que le nom de la propriété, ce qui est pas dans ce cas.

+0

génial, merci, il. :) pour une raison quelconque, je pensais que la méthode Id() mappait automatiquement le PK. :) –

+0

@bryan, comment Fluent pourrait-il deviner le nom PK? –

+0

Cool. N'hésitez pas à marquer cela comme la réponse! – codekaizen

Questions connexes