【发布时间】:2014-01-15 13:10:47
【问题描述】:
对于我当前的项目,我正在学习 NHibernate,但我无法翻译以下查询
select person.Firstname, person.Lastname
from Person
inner join Contract on contract.PersonId = person.Id
inner join Budget on budget.ContractId = contract.Id
inner join Choice on choice.BudgetId = budget.Id
inner join ChosenBenefit on ChosenBenefit.ChoiceId = choice.Id
where ChosenBenefit.BenefitImplementationId = 77
我认为下面的方法可以解决问题,但我得到了一个空引用,其中包含我无法从中做出正面或反面的堆栈跟踪。
Choice choice = null;
Budget budget = null;
Contract contract = null;
Person person = null;
var peopleThatChose = Session.QueryOver<ChosenBenefit>()
.JoinAlias(chosenBenefit => chosenBenefit.Choice, () => choice)
.JoinAlias(chosenBenefit => choice.Budget, () => budget)
.JoinAlias(chosenBenefit => budget.Contract, () => contract)
.JoinAlias(chosenBenefit => contract.Person, () => person)
.Where(chosenBenefit => chosenBenefit.BenefitImplementation.Id == 77)
.Select(benefit => person);
从各地的所有示例来看,我应该QueryOver<Person>,但我无法找到我想要限制的地方。
我错过了什么?
【问题讨论】:
-
是否有从
Person到ChosenBenefit的映射? -
没有。由于两者之间没有直接联系,我不确定我将如何实现它。
-
抱歉我打错了——我想问一下是否有从
Person到Contract的映射。 -
是的,一个人有很多合同。
标签: c# .net nhibernate