暗号化されたDBに保存する必要があるユーザー名を持つユーザークラスがあります
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; }
}
User エンティティを次のようにマッピングしました。
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 を使用してクエリを実行できるようにする必要があります。