在我正在进行的项目中,我有四个实体(在众多其他实体中),WorkOrder,Crew,CrewAssignment和Contractor。他们的关系是这样的:
我遇到的问题是设置WorkOrder可以有多个CrewAssignments的最后一部分。我想要做的是确保WorkOrder.CrewAssignments属性仅返回CrewAssignments,其Crew与WorkOrder具有相同的Contractor。或者,不那么罗嗦,“在哪里WorkOrder.Contractor == CrewAssignment.Crew.Contractor”。
我唯一能想到的就是这个,但是它引发了一个关于x变量未定义的异常。
HasMany(x => x.CrewAssignments).KeyColumn("WorkOrderID").Where(x => x.Crew.Contractor == x.WorkOrder.Contractor);
甚至可以做这样的事情吗?还是我完全吠叫了错误的树?谷歌整个上午一直没有让我失望。有什么想法吗?
答案 0 :(得分:4)
我不知道它是否可以帮助你,但这是我接受的。
在 FluentNHibernate 中,您有一个名为ApplyFilter
的方法,您可以在映射中设置该方法以过滤子集:
HasMany(x => x.CrewAssignments).KeyColumn("WorkOrderID").ApplyFilter<MyFilter>().Cascade.AllDeleteOrphan();
然后您可以创建过滤器:
public class MyFilter: FilterDefinition
{
public MyFilter()
{
WithName("contractor").WithCondition("Crew.ContractorId== :contractorId").AddParameter("contractorId", NHibernate.NHibernateUtil.Int32);
}
}
然后在您的存储库的实现中,您调用过滤器:
Sessions.EnableFilter("contractor").SetParameter("contractorId", 1254);
我不知道这是否是最佳解决方案,但现在是我唯一能想到的解决方案。