在流畅的映射中,子对象的属性的where子句

时间:2012-09-20 15:55:17

标签: fluent-nhibernate parent-child has-many fluent-nhibernate-mapping

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

我有Customer这样的对象:

public class Customer
{
    public virtual int CustomerId { get; set; }
    public virtual IList<RecurringPayment> Recurring { get; set; }
}

然后我的反复出现

public class RecurringPayment
{
    public virtual int RecurringPaymentId{ get; set; }
    public virtual ItemBase OriginalItem { 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作为.Where(y => y.OriginalItem.Status != ItemStatus.Deleted)执行where子句,我会得到一个不同的错误:

  

System.InvalidOperationException:从范围''引用的'Namespace.RecurringPayment'类型的变量'y',但未定义

那么,如何将我的定期付款清单限制为仅删除原始项目的状态(状态6)?

0 个答案:

没有答案