【发布时间】:2012-10-11 22:36:58
【问题描述】:
我有一个用户类,它的用户名需要加密保存在数据库中
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'
您可能会注意到,表中没有名为 username 的列,而是 secureusername,它包含加密的值 谁能帮我解决这个问题,我需要能够使用 LINQ 进行查询。
【问题讨论】:
-
首先你的代码不支持这个搜索要求。如果给出了完整的用户名,您的代码只能搜索用户。你必须寻找类似 [this] 的东西,但这不是 nhibernate。但这必须是这样的。但这不是 nhibernate(stackoverflow.com/questions/835790/how-to-do-sql-like-in-linq)
标签: c# linq nhibernate fluent-nhibernate