Fluent nhibernate hasmany-in-fluent映射中子对象属性的Where子句

Fluent nhibernate hasmany-in-fluent映射中子对象属性的Where子句,fluent-nhibernate,parent-child,has-many,fluent-nhibernate-mapping,Fluent Nhibernate,Parent Child,Has Many,Fluent Nhibernate Mapping,我想通过HasMany映射中的子对象上的属性来限制列表 我有一个这样的客户对象: public class Customer { public virtual int CustomerId { get; set; } public virtual IList<RecurringPayment> Recurring { get; set; } } ItemBase有一个类型鉴别器,但它不相关。这部分是: public class ItemBase { publ

我想通过HasMany映射中的子对象上的属性来限制列表

我有一个这样的客户对象:

public class Customer
{
    public virtual int CustomerId { get; set; }
    public virtual IList<RecurringPayment> Recurring { get; set; }
}
ItemBase有一个类型鉴别器,但它不相关。这部分是:

public class ItemBase
{
    public virtual int ItemId { get; set; }
    public virtual ItemStatus Status { get; set; }
}
ItemStatus是一个枚举

那么,让我们向后看映射。首先是这个项目

public sealed class ItemBaseMap : ClassMap<ItemBase>
{
    public ItemBaseMap()
    {
        //omit the non-important parts

        Map(x => x.Status, "Status").CustomType<ItemStatus>();
    }
}
现在是定期付款

public sealed class RecrringPaymentMap: ClassMap<RecurringPayment>
{
    public RecrringPaymentMap()
    {
        //omit the non-important parts

        References<ItemBase>(x => x.OriginalItem, "OriginalItemId");
    }
}
最后,我的客户映射

public sealed class CustomerMap: ClassMap<Customer>
{
    public CustomerMap()
    {
        //omit the non-important parts

        HasMany<RecurringPayment>(x => x.Recurring)
                .KeyColumn("CustomerId")
                .Where("OriginalItem.Status != 6")
                .Inverse()
                .Fetch.Subselect();
    }
}
我的问题是客户映射中HasMany上的where子句。如果我使用字符串where子句执行上述操作。我得到一个错误:

System.Data.SqlClient.SqlException:无法绑定多部分标识符OriginalItem.Status

如果我切换它并使用linq as.where=>y.OriginalItem.Status执行where子句ItemStatus.Deleted我收到另一个错误:

System.InvalidOperationException:从作用域引用了“Namespace.RecurringPayment”类型的变量“y”,但未定义该变量


那么,我如何将我的定期付款列表限制为那些原始项目未被删除的项目状态6?

在LINQ实现中,我看到了同样的情况。运气好吗?搞清楚这件事就没运气了。我只是在没有where子句的情况下保留了映射,然后在使用非删除的定期付款之前,在单独的linq语句中过滤掉删除的项目及其定期付款。
public sealed class CustomerMap: ClassMap<Customer>
{
    public CustomerMap()
    {
        //omit the non-important parts

        HasMany<RecurringPayment>(x => x.Recurring)
                .KeyColumn("CustomerId")
                .Where("OriginalItem.Status != 6")
                .Inverse()
                .Fetch.Subselect();
    }
}