C# 使用nhibernate检索单个行和列,并将其转换为字符串
我正在用Salt在MVC4.0中创建一个登录函数。对于每个注册用户,Salt是恒定的,因为安全性不必是一流的。现在要创建散列(与数据库中的散列进行比较),我需要从数据库中检索特定用户的salt,并使用插入的密码创建散列。我使用Nhibernate进行数据库传输。然而,由于我对Nhibernate相当陌生,我不知道如何将盐作为字符串检索,我尝试了以下方法:C# 使用nhibernate检索单个行和列,并将其转换为字符串,c#,nhibernate,C#,Nhibernate,我正在用Salt在MVC4.0中创建一个登录函数。对于每个注册用户,Salt是恒定的,因为安全性不必是一流的。现在要创建散列(与数据库中的散列进行比较),我需要从数据库中检索特定用户的salt,并使用插入的密码创建散列。我使用Nhibernate进行数据库传输。然而,由于我对Nhibernate相当陌生,我不知道如何将盐作为字符串检索,我尝试了以下方法: var salt = session.QueryOver<Translator>() .Where(x => x
var salt = session.QueryOver<Translator>()
.Where(x => x.EmailAddress == emailAddress)
.Select(x => x.Salt)
.List()
.ToString();
var salt=session.QueryOver()
.Where(x=>x.EmailAddress==EmailAddress)
.选择(x=>x.Salt)
.List()
.ToString();
x在哪里。是映射,emailAddress
是函数中的一个参数。
错误提到salt值(它实际上显示字符串)不是models.translator类型,因此不能在此泛型集合中使用。获取整个实体然后获取其
.salt
属性并不昂贵,因此您可以放心地忘记选择部分
但是,在criteria API中,我知道可以在查询中使用.SetProjection()
来获取单个属性,然后调用.UniqueResult()
使用QueryOver
,您可以尝试.List()
。但是,不要在列表中调用.ToString()
,而是使用.Single()
获取列表中的唯一元素,为什么不使用默认的SimpleMembership和salt密码呢?我有一种分配,我必须使用某些选项,比如加密到pbkdf2进行哈希。。SimpleMembership没有涵盖这一点,对吗?请注意,在MVC 4和ASP.NET 4和4.5中,默认哈希现在是HMACSHA256。也许这个主题可以帮助您:是的,但我还是有点被作业中必须使用的东西卡住了。。希望我能使用简单的解决方案是的,List
(或者SingleOrDefault
,如果是单个条目)应该可以。LINQ provider也可以用于获得相同的结果。嗯,当我读到这些片段时,它们似乎解决了难题,但我在创建正确的语法来完成难题时遇到了一些困难。。你能给我举个例子吗?这里有一个官方的例子,段落中的第三个:。因此,我怀疑它不是.List().ToString(),而是.List().Single(),甚至是@Patryk建议的.Single()。如果可能没有行,请将Single更改为SingleOrDefault。是的,我看到了该示例并尝试了它,很明显问题不在于此语法,而在于其他地方,因为我得到的错误显示我想从数据库检索的salt字符串非常好,但它似乎无法用于此常规集合。。不过,我不明白那是什么意思。。