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

在NHibernate中加载具有多个候选密钥的实体?,nhibernate,Nhibernate,好的,简单的问题:) 在我的门户网站中,有一些用户显然需要登录 我在MSSQL-DB中得到了一个包含用户的表: PK-GUID-UserId CK-nvarchar-Email CK-nvarchar-电话号码 现在,我希望用户能够使用他们的电话号码或电子邮件登录到我的网站,因此我需要以某种方式使用电话号码或电子邮件(这两者都是唯一的)获取用户 在NHibernate中,ISession只允许我使用主键(在我的例子中,主键基本上是代理键)加载实体。是否仍然可以使用候选键加载实体 我对数据库设

好的,简单的问题:)

在我的门户网站中,有一些用户显然需要登录

我在MSSQL-DB中得到了一个包含用户的表:

  • PK-GUID-UserId
  • CK-nvarchar-Email
  • CK-nvarchar-电话号码
现在,我希望用户能够使用他们的电话号码或电子邮件登录到我的网站,因此我需要以某种方式使用电话号码或电子邮件(这两者都是唯一的)获取用户

在NHibernate中,ISession只允许我使用主键(在我的例子中,主键基本上是代理键)加载实体。是否仍然可以使用候选键加载实体

我对数据库设计非常生疏,所以这可能是糟糕的设计,但我真的认为这样的方案有点常见-但如果是糟糕的设计,请让我知道:)


提前谢谢

噢,天哪。。我自己找到了答案:)

在这里发布,以防任何人遇到同样的问题

我们需要的是NHibernate标准或NQL。我在这里找到了我需要的信息:

--在“查询和条件”下,向下滚动大约四分之五


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

没有使用NHibernate,但是在Java中,使用Session::executeQuery和一些简单的HQL可以获取正确的对象。首先,我假设Hibernate的“会话”等同于NHibernates的“会话”。第二,我假设HQL对这两个方面都是相同的。如果这两个都是真的,您可能会使用以下内容:

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


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

是的,这基本上就是我自己发现的。HQL真的提高了Hibernate的灵活性——真不敢相信我以前没有找到它:)非常感谢
user = isession.executeQuery('from Users where PhoneNumber = ?');