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使用类名而不是它的鉴别器?
我相信你想:
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)
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |