C# nHibernate返回不使用Id字段的单个对象(使用nHibernate 2.0)

C# nHibernate返回不使用Id字段的单个对象(使用nHibernate 2.0),c#,nhibernate,C#,Nhibernate,我想使用guid返回一个sngle对象(它不是主键,但它是唯一的) 我可以通过以下方式使用id返回单个对象: public User GetUserById(Int32 userId) { User user = null; using (ITransaction tx = _session.BeginTransaction()) { try { user = _session.Get<User>(use

我想使用guid返回一个sngle对象(它不是主键,但它是唯一的)

我可以通过以下方式使用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;
}

感谢您的建议

UniqueResult()

另外,使用SetParameter()代替SetString()

公共用户GetUserByGuId(Int32 guid) { User=null; 使用(ITransaction tx=\u session.BeginTransaction()) { 尝试 { user=\u session.CreateQuery(“来自用户u,其中u.UserGuid=:guid”) .SetParameter(“guid”,guid) .UniqueResult(); tx.Commit(); } 捕获(NHibernate.hibernateeexception) { tx.回滚(); 投掷; } } 返回用户; } 使用:

user=session.Linq();

我想指出,您不需要CreateQuery中的“选择”。请看我的答案(已编辑)。我还在精彩的NHibernate.linqAPI中包含了一个示例。
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;
}
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;
} 
user = session.Linq<User>().Where(u => u.UserGuid == guid).SingleOrDefault();