简体   繁体   English

如何在Fluent nHibernate中对HasMany映射进行额外过滤?

[英]How do you do additional filtering on a HasMany mapping in Fluent nHibernate?

In a project I'm working on, I have four entities(amongst a bunch of others), WorkOrder, Crew, CrewAssignment, and Contractor. 在我正在进行的项目中,我有四个实体(在众多其他实体中),WorkOrder,Crew,CrewAssignment和Contractor。 Their relationship is like this: 他们的关系是这样的:

  • A WorkOrder has one Contractor, which can be changed WorkOrder有一个承包商,可以更改
  • A Crew only ever has one Contractor 船员只有一个承包商
  • A CrewAssignment only ever has one Crew CrewAssignment只有一个Crew
  • A WorkOrder has many CrewAssignments WorkOrder有许多CrewAssignments

The problem I'm having is setting up the last part where a WorkOrder can have multiple CrewAssignments. 我遇到的问题是设置WorkOrder可以有多个CrewAssignments的最后一部分。 What I want to do is ensure that the WorkOrder.CrewAssignments property only returns the CrewAssignments that have a Crew with the same Contractor as the WorkOrder. 我想要做的是确保WorkOrder.CrewAssignments属性仅返回CrewAssignments,其Crew与WorkOrder具有相同的Contractor。 Or, less wordy, "where WorkOrder.Contractor == CrewAssignment.Crew.Contractor". 或者,不那么罗嗦,“在哪里WorkOrder.Contractor == CrewAssignment.Crew.Contractor”。

The only thing I've been able to come up with is this, but it throws an exception about the x variable being undefined. 我唯一能想到的就是这个,但它抛出了一个关于x变量未定义的异常。

HasMany(x => x.CrewAssignments).KeyColumn("WorkOrderID").Where(x => x.Crew.Contractor == x.WorkOrder.Contractor);

Is doing something like this even possible? 做这样的事情甚至可能吗? Or am I barking up the wrong tree entirely? 还是我完全吠叫了错误的树? Google's been failing me all morning with this one. 谷歌整个上午一直没有让我失望。 Any ideas? 有任何想法吗?

I don't know if it could help you but here is my take on in. 我不知道它是否可以帮助你,但这是我接受的。

In FluentNHibernate you have a method called ApplyFilter that you can set up in your mappings in order to filter on child collections : FluentNHibernate中,您有一个名为ApplyFilter的方法,您可以在映射中设置该方法以过滤子集合:

HasMany(x => x.CrewAssignments).KeyColumn("WorkOrderID").ApplyFilter<MyFilter>().Cascade.AllDeleteOrphan(); 

Then you can create your filter : 然后你可以创建你的过滤器:

public class MyFilter: FilterDefinition
{
    public MyFilter()
    {
        WithName("contractor").WithCondition("Crew.ContractorId== :contractorId").AddParameter("contractorId", NHibernate.NHibernateUtil.Int32);
    }
}

Then in the implementation of your repository, you invoke the filter : 然后在您的存储库的实现中,您调用过滤器:

Sessions.EnableFilter("contractor").SetParameter("contractorId", 1254);

I don't know if this is the best solution but the only one that comes to my mind right now. 我不知道这是不是最好的解决方案,而是我现在唯一想到的解决方案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用IHasManyConvention Fluent NHibernate约定在HasMany映射上设置PropertyRef? - How do I use the IHasManyConvention Fluent NHibernate convention to set the PropertyRef on a HasMany mapping? 流利的NHibernate和HasMany映射 - Fluent NHibernate and HasMany mapping 流利的Nhibernate映射hasMany - Fluent Nhibernate mapping hasMany 如何做一个流利的nhibernate一对一映射? - How to do a fluent nhibernate one to one mapping? 流利的Nhibernate HasMany映射问题 - Fluent Nhibernate HasMany mapping issue 在Fluent NHibernate中,如何指定字典映射类型的大小? - In Fluent NHibernate how do I specify a dictionary mapping type size? 非空外键的流畅 nhibernate 映射(HasMany) - fluent nhibernate mapping with not null foreign key (HasMany) 当使用Fluent NHibernate自动映射集合时,如何使子代的父代外键为空? - When auto-mapping a collection with Fluent NHibernate, how do you make the child's foreign key to the parent nullable? 如何在NHibernate hbm xml(或在fluent-nhibernate类映射中)映射也是主键的组件? - How do you map a component that is also a primary key in NHibernate hbm xml (or in a fluent-nhibernate class map)? Fluent NHibernate-从SQL转换为C#类型时如何进行附加处理? - Fluent NHibernate - How to do Additional Processing when Converting from SQL to C# type?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM