2010-08-12 8 views
0

Je veux retourner un objet sngle usig un guid (ne est pas la clé primaire, mais il est unique)NHibernate retour seul objet de ne pas utiliser champ Id (en utilisant NHibernate 2.0)

Je suis en mesure de retourner un seul objet en utilisant l'identifiant par:

public User GetUserById(Int32 userId) 
{ 
    User user = null; 
    using (ITransaction tx = _session.BeginTransaction()) 
    { 
     try 
     { 
      user = _session.Get<User>(userId); 
      tx.Commit(); 
     } 
     catch (NHibernate.HibernateException) 
     { 
      tx.Rollback(); 
      throw; 
     } 
    } 
    return user; 
} 

mais voulez retun par guid mais ne peut pas sembler le faire:

public User GetUserByGuId(Int32 guid) 
{ 
    User user = null; 
    using (ITransaction tx = _session.BeginTransaction()) 
    { 
     try 
     { 
      user = _session.CreateQuery("select from User u where u.UserGuid =:guid") 
        .SetString("guid", guid) 
        .???? 
      tx.Commit(); 
     } 
     catch (NHibernate.HibernateException) 
     { 
      tx.Rollback(); 
      throw; 
     } 
    } 
    return user; 
} 

Merci à advaced

+0

Je tiens à souligner que vous n'avez pas besoin "sélectionnez" dans CreateQuery. Jetez un oeil à ma réponse (édité). J'ai également inclus un exemple dans la merveilleuse API NHibernate.Linq. – rebelliard

Répondre

2

. UniqueResult < T>();

Utilisez également SetParameter() au lieu de SetString().

public User GetUserByGuId(Int32 guid) 
{ 
    User user = null; 
    using (ITransaction tx = _session.BeginTransaction()) 
    { 
     try 
     { 
      user = _session.CreateQuery("from User u where u.UserGuid =:guid") 
      .SetParameter("guid", guid) 
      .UniqueResult<User>(); 
      tx.Commit(); 
     } 
     catch (NHibernate.HibernateException) 
     { 
      tx.Rollback(); 
      throw; 
     } 
    } 
    return user; 
} 

En utilisant NHibernate.Linq:

user = session.Linq<User>().Where(u => u.UserGuid == guid).SingleOrDefault(); 
+0

Merci beaucoup – user418354

Questions connexes