在nhibernate中使用其他集合属性映射派生类

时间:2009-08-08 00:20:54

标签: nhibernate inheritance fluent-nhibernate

我正在尝试使用table-per-subclass(默认情况下为fluent-nhibernate自动化),其类结构如下所示:

public class Product 
{
    public virtual int Id{ get; set; }
    public virtual string Title{ get; set; }
}

public class ProductPackage : Product
{
    public ProductPackage(){ Includes = new List<Product>(); }
    public virtual IList<Prodcut> Includes{ get; private set; }

    [EditorBrowsable( EditorBrowsableState.Never )]
    public class ProductPackageAutoOverride : IAutoMappingOverride<ProductPackage>
    {
        public void Override( AutoMap<ProductPackage> mapping )
        {
            mapping.HasManyToMany( x => x.Includes )
                .WithTableName( "IncludesXProduct" )
                .WithParentKeyColumn( "ProductId" )
                .WithChildKeyColumn( "IncludesProductId" )
                .Cascade.SaveUpdate();
        }
    }
}

它不是添加新表“IncludesXProduct”来表示多对多映射,而是将一个属性“ProductPackageId”添加到Product表中。当然坚持这种模式是行不通的。

我是否遗漏了一些简单的东西,或者NHibernate是否真的不支持这种类型的东西?

1 个答案:

答案 0 :(得分:0)

可以使用NHibernate完成此操作。不幸的是,我的流利语法不是很好,但看起来FNH在某种程度上将这种关系视为多对一而不是多对多。

如果您使用“fluent-nhibernate”标记您的问题,那么您可能会让更多知识渊博的人回答。