如何在NHibernate中查询不属于模型的属性?

时间:2011-08-10 16:05:32

标签: c# nhibernate

我有一个User实体,其中包含用户名,名称和其他非敏感信息。

在身份验证期间,我需要查询密码(哈希值)和密码salt以进行哈希比较。由于它们的敏感性,这两个属性不属于模型的一部分。

如何在不使用CreateSQLQuery的情况下在NHibernate中查询这两个属性?我现在CreateSQLQuery有效,但我试图找到一种非SQL方式。

2 个答案:

答案 0 :(得分:2)

创建一个DTO,该DTO将映射到与User相同的表格,并且仅用于此目的,并使用它。
例如 -

public class AuthUserDTO
{
   public virtual string Username {get; set;}
   public virtual string PasswordHash {get; set;}
   public virtual string Salt {get; set;}
}

所有“常规”方法都会返回常规User对象,但GetUserForAuthentication会返回AuthUserDTO

答案 1 :(得分:1)

您可以使用“access”属性在映射文件中使用仅查询属性。例如。在你的hbm文件中:

<property name="PasswordHash" type="string" column="PasswordHash" access="none" />

这将允许您在HQL或Criteria查询中查询PasswordHash,就像它是普通属性一样,但您的用户类中实际上没有PasswordHash属性。