NHibernate没有使用鉴别器值来按子类型进行过滤,为什么?

Bra*_*bby 3 nhibernate fluent-nhibernate queryover

我有这样的域模型:

类图

在映射中,我使用的是每层次表结构,其中所有LineItemOption子类型都存储在单个表中,并且命名的"OptionType"用作鉴别器.此列未映射到属性,并且对域不可见.

// FluentNHibernate ClassMap for LineItemOption
Map(lio => lio.Description);
DiscriminateSubClassesOnColumn("OptionType");

// FluentNHibernate SubclassMap for ColorOption
DiscriminatorValue("C")

// FluentNHibernate SubclassMap for GenericOption
DiscriminatorValue("O")
Run Code Online (Sandbox Code Playgroud)

我正在使用QueryOver API来获取Order包含LineItem具有LineItemOption包含特定描述的特定类型的s 的列表.

private void AddColorRestrictionToQuery(
    IQueryOver<Order, Order> query,
    string color)
{
    query.JoinQueryOver<LineItem>(order => order.LineItems)
         .JoinQueryOver<LineItemOption>(line => line.Options)
         .Where(opt => opt.Description.IsLike(color))
         .Where(opt => opt is ColorOption);     // See below
}
Run Code Online (Sandbox Code Playgroud)

这导致NHibernate向查询添加"WHERE OptionType = MyNamespace.Entities.ColorOption ".它似乎使用完全限定的命名空间+类名,而不是使用鉴别器值.

为什么NHibernate使用类名而不是它的鉴别器?

And*_*ker 5

我相信你想:

query.JoinQueryOver<LineItem>(order => order.LineItems)
     .JoinQueryOver<LineItemOption>(line => line.Options)
     .Where(opt => opt.Description.IsLike(color))
     .Where(opt => opt.GetType() == typeof(ColorOption));
Run Code Online (Sandbox Code Playgroud)