2009-11-06 73 views
1

我有一个流利的nhibernate表每个类层次结构映射的问题。我有2个域对象,容器(基类)和专辑(子类)。相册只包含一个构造函数。来自Sharp Architect的EntityWithTypedId中的容器dervies。 EntityWithTypedId提供Guid类型的键(名称为ContainerId)。流利的NHibernate表每个类层次结构多个表映射问题

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”的表中。我有一个容器的映射文件:

public class ContainerMap : IAutoMappingOverride<Container> 
{ 
    public void Override(AutoMap<Container> mapping) 
    { 
     mapping.DiscriminateSubClassesOnColumn<int>("Type"); 
    } 
} 

NHibernate假定使用2个表。表“Containers”按预期映射,但NHibernate假设另一个表“Album”仅包含一个名为“Container”的Id,该Id等于表“Containers”中的ContainerId。我如何更改映射,以便不需要表“专辑”?

如果我提供了一个映射类专辑我得到即使专辑映射是空的映射错误: FluentNHibernate.Cfg.FluentConfigurationException:创建一个会话使用了无效的或不完整的配置。请参阅PotentialReasons集合和InnerException以获取更多详细信息。

  • 数据库未通过数据库方法配置。

    ----> System.ArgumentException:'FluentNHibernate.AutoMap.AutoMap'类型的对象1[Core.Album]' cannot be converted to type 'FluentNHibernate.AutoMap.AutoMap 1 [Core.Container]'。

谢谢!

/Marcus

回答

1

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

相关问题