2009-11-06 107 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處理爲屬性,它會自動處理。

相關問題