我有一个用户类,它的用户名需要加密保存在数据库中
public abstract class User
{
public virtual int Id { get; protected set; }
public virtual string Username
{
get
{
return _encryptionProvider.Decrypt(SecuredUsername);
}
protected set
{
SecuredUsername = _encryptionProvider.Encrypt(value);
}
}
[Obsolete("Use the 'Username' property -- this property is only to be used by NHibernate")]
protected virtual string SecuredUsername { get; set; }
}
我将用户实体映射如下:
public class UserMapping : ClassMap<User>
{
public UserBaseMapping()
{
Id(user => user.Id).GeneratedBy.HiLo("100");
Map(Reveal.Member<UserBase>("SecuredUsername")).Unique();
}
}
在我不得不编写一些 LINQ 语句之前,它工作得很好。
User user = _session.QueryOver<User>().Where(x => x.Username == "Hamza").SingleOrDefault();
这里的问题是,当 LINQ 将上述语句转换为 SQL 时,它会变成这样: Select * from [dbo].[User] Where Username like 'Hamza'
正如您可能注意到的那样,表中没有名为用户名的列,而是securedusername,它包含加密值谁能帮我解决这个问题,我需要能够使用LINQ进行查询。