我遇到了每个类层次结构映射的流畅的nhibernate表问题。我有2个域对象,容器(基类)和专辑(子类)。专辑只包含一个构造函数。来自Sharp Architect的EntityWithTypedId的容器版本。 EntityWithTypedId提供Guid类型的键(名称为ContainerId)。
public class Container : EntityWithTypedId<Guid>
{
public Container()
{
}
protected Container(Guid userId)
: this()
{
UserId = userId;
}
public virtual int Type { get; set; }
public virtual Guid UserId { get; set; }
}
public class Album : Container
{
public Album()
: base()
{
Type = (int)ContainerType.Album;
}
public Album(Guid userId)
: base(userId)
{
Type = (int)ContainerType.Album;
}
}
我希望将所有域对象保存在名为“Containers”的单个表中。我有一个Container的映射文件:
public class ContainerMap : IAutoMappingOverride<Container>
{
public void Override(AutoMap<Container> mapping)
{
mapping.DiscriminateSubClassesOnColumn<int>("Type");
}
}
NHibernate假设使用了2个表。表“Containers”按预期映射,但NHibernate假定另一个表“Album”只包含一个名为“Container”的Id,它等于表“Containers”中的ContainerId。如何更改映射以便不需要表“Album”?
如果我为Album提供映射类,即使专辑映射为空,我也会收到映射错误: FluentNHibernate.Cfg.FluentConfigurationException:创建SessionFactory时使用了无效或不完整的配置。检查PotentialReasons集合,以及InnerException以获取更多详细信息。
数据库未通过数据库方法配置。
----&GT; System.ArgumentException:类型为'FluentNHibernate.AutoMap.AutoMap 1[Core.Album]' cannot be converted to type 'FluentNHibernate.AutoMap.AutoMap
1 [Core.Container]'的对象。
谢谢!
/马库斯
答案 0 :(得分:1)
不要将Type作为属性处理,它会自动处理。