我有了用戶名的用戶類,我需要在數據庫中保存加密查詢使用LINQ
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變成是這樣的:從[DBO] 選擇* [用戶]哪裏像「哈姆扎」
而作爲用戶名,你可能注意到表中沒有名爲username的列,但securedusername並且包含加密值 任何人都可以請我幫忙解決這個問題,我需要能夠使用LINQ進行查詢。
首先,您的代碼不支持此搜索要求。您的代碼只能搜索用戶是否給出了整個用戶名。你必須尋找[this]這樣的東西,但這不是nhibernate。但是這必須是這樣的。但這不是nhibernate(http://stackoverflow.com/questions/835790/how-to-do-sql-like-in-linq) –