HasMany <mysubtype>映射返回超类型和所有后代?</mysubtype>

时间:2009-10-29 20:10:04

标签: fluent-nhibernate

我在遇到FluentNHibernate的HasMany&lt;&gt;时遇到问题映射表现得像我期望的那样。

我有一个类的层次结构,Child是Parent的后代,使用table-per-hierarchy定义,由名为'TYPE'的列中的类名区分。不相关的类组包含一组子元素。

因此,Group类定义为:

public class Group
{
    public virtual IList<Child> Children {get; protected set;}

    public Group()
    {
        Children = new List<Children>();
    }
}

我在Fluent NHibernate中的地图如下所示:

public class GroupMap : SubclassMap<Group>
{
    public GroupMap()
    {
        HasMany<Child>(x => x.Children)
            .Not.LazyLoad()
            .Inverse()
            .Cascade.All();
    }
}

我希望使用Group.Children会产生一个Child类型的对象集合,但它返回一个包含Parent或Child类型对象的集合。

查看生成的SQL,select语句不会根据包含Parent和Child对象的表中的TYPE列进行区分。

将我的映射更改为:

public class GroupMap : SubclassMap<Group>
{
    public GroupMap()
    {
        HasMany<Child>(x => x.Children)
            .Inverse()
            .Not.LazyLoad()
            .Where("Type = 'Child'")
            .Cascade.All();
    }
}

解决了这个问题,但对我来说似乎是一个黑客攻击。声明“HasMany”不应该推断结果应该只是Child类型吗?

我是否错误地映射了我的收藏品?

1 个答案:

答案 0 :(得分:0)

简短的回答是我已经不再使用FluentNHibernate映射了。

我回到使用普通的.hbm.xml映射,结果更加快乐。