我在遇到FluentNHibernate的HasMany<>时遇到问题映射表现得像我期望的那样。
我有一个类的层次结构,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类型吗?
我是否错误地映射了我的收藏品?
答案 0 :(得分:0)
简短的回答是我已经不再使用FluentNHibernate映射了。
我回到使用普通的.hbm.xml映射,结果更加快乐。