流畅的NHibernate表每个类层次结构多个表映射问题

时间:2009-11-06 16:25:42

标签: nhibernate fluent-nhibernate nhibernate-mapping

我遇到了每个类层次结构映射的流畅的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]'的对象。

谢谢!

/马库斯

1 个答案:

答案 0 :(得分:1)

不要将Type作为属性处理,它会自动处理。