ros*_*ead 1 c# nhibernate fluent-nhibernate
在我正在进行的一个项目中,我有四个实体(以及其他一些实体),WorkOrder、Crew、CrewAssignment 和 Contractor。他们的关系是这样的:
我遇到的问题是设置 WorkOrder 可以有多个 CrewAssignments 的最后一部分。我想要做的是确保 WorkOrder.CrewAssignments 属性只返回与工作订单具有相同承包商的 CrewAssignments。或者,不那么冗长,“WorkOrder.Contractor == CrewAssignment.Crew.Contractor”。
我唯一能想到的就是这个,但它抛出了一个关于 x 变量未定义的异常。
HasMany(x => x.CrewAssignments).KeyColumn("WorkOrderID").Where(x => x.Crew.Contractor == x.WorkOrder.Contractor);
Run Code Online (Sandbox Code Playgroud)
做这样的事情甚至可能吗?还是我完全在错误的树上吠叫?谷歌整个上午都在用这个让我失望。有任何想法吗?
我不知道它是否可以帮助你,但这是我的看法。
在FluentNHibernate 中ApplyFilter,您可以在映射中设置一个名为的方法,以便过滤子集合:
HasMany(x => x.CrewAssignments).KeyColumn("WorkOrderID").ApplyFilter<MyFilter>().Cascade.AllDeleteOrphan();
Run Code Online (Sandbox Code Playgroud)
然后你可以创建你的过滤器:
public class MyFilter: FilterDefinition
{
public MyFilter()
{
WithName("contractor").WithCondition("Crew.ContractorId== :contractorId").AddParameter("contractorId", NHibernate.NHibernateUtil.Int32);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的存储库的实现中,您调用过滤器:
Sessions.EnableFilter("contractor").SetParameter("contractorId", 1254);
Run Code Online (Sandbox Code Playgroud)
我不知道这是否是最好的解决方案,但我现在想到的唯一解决方案。
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |