在NHibernate中加载具有多个候选键的实体?

时间:2009-03-28 14:34:49

标签: nhibernate

好的,简单的问题.. :))

在我的网站上,我找到了显然需要登录的用户。

我在MSSQL-DB中找到了一个用户表:

  • PK - GUID - UserId
  • CK - nvarchar - 电子邮件
  • CK - nvarchar - PhoneNumber

现在,我希望用户能够使用他们的电话号码或电子邮件登录我的网站,因此我需要以某种方式使用电话号码或电子邮件来获取用户(两者都是保证唯一的。) / p>

在NHibernate中,ISession只允许我使用主键加载实体(在我的情况下,它基本上是代理键)。无论如何使用候选键加载实体?

我在数据库设计方面非常生疏,所以这可能是糟糕的设计,但我认为这样的计划有点普遍 - 但如果设计很差,请告诉我:)

提前致谢

2 个答案:

答案 0 :(得分:2)

没有使用NHibernate,但是在Java中,使用Session :: executeQuery和一些简单的HQL会获取正确的对象。首先,我假设Hibernate的“Session”与NHibernates“ISession”相同。其次,我认为两者的HQL是相同的。如果这两个都是真的,你可能会使用类似的东西:

user = isession.executeQuery('from Users where Email = ?');

user = isession.executeQuery('from Users where PhoneNumber = ?');

同样,因为我没有使用NHibernate,所以语法上可能会有一些差异。希望它有所帮助!

答案 1 :(得分:0)

哦,我的..自己找到答案:)

如果有人遇到同样的问题,请在此处发布。

我们需要的是NHibernate Criterias或NQL。我在这里找到了我需要的信息: http://www.beansoftware.com/asp.net-tutorials/nhibernate-log4net.aspx

- 在“查询和标准”下 - 向下滚动约4/5。

(不要认为我允许在这里引用信息,所以我最好不要)