2010-08-12 66 views
0

我想回到一個SNGLE對象USIG一個GUID(它不是主鍵,但它是唯一的)NHibernate的返回一個對象不使用標識字段(使用NHibernate 2.0)

我能夠返回同一個對象使用由ID:

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; 
} 

但是想要GUID來retun,但似乎不這樣做:

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; 
} 

感謝您在advaced

+0

我想指出的是您不需要的createQuery 「選擇」。看看我的答案(編輯)。我還在NHibernate.Linq API中包含了一個例子。 – rebelliard 2010-08-12 12:32:51

回答

2

UniqueResult < T>();

此外,使用SetParameter()而不是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; 
} 

使用NHibernate.Linq

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

非常感謝 – user418354 2010-08-12 12:26:31

相關問題