流畅的Nhibernate Automapping with overrides:映射未映射的基类集合

Vic*_*jee 5 .net c# nhibernate fluent-nhibernate

域名:

public class BaseClassClient
{
    public virtual ICollection<BaseClass> BaseObjects{ get; set; }
}

public abstract class BaseClass
{
}

public class SubClass1 : BaseClass
{
}

public class SubClass2 : BaseClass
{
}
Run Code Online (Sandbox Code Playgroud)

Association references unmapped class即使两个子类都已映射,我也会收到错误.显然,基类本身没有映射.请建议如何解决这个问题.

编辑

在关闭一个问题作为另一个问题之前,我宁愿这样做,他们只是不读,但也关心理解这两个问题.

我已经看到了错误:流畅的NHibernate映射,它引用了不同程序集中的映射.但它谈到了一个不同的场景.

我的情况如下.

public class Product
{
    public int Id { get; set; }
    public ICollection<BasePricingRule> PricingRules{ get; set; }
}

public abstract class BasePricingRule
{
    public int Id { get; set; }
    //other properties
}

//Several concrete classes inherit from BasePricingRule.
Run Code Online (Sandbox Code Playgroud)

我希望每个具体类都有一个表,并且没有基类的表.因此,没有映射BasePricingRule.我允许类自动映射,偶尔提供必要的覆盖.我为产品类创建了一个自动覆盖,如下所示.

    public void Override(FluentNHibernate.Automapping.AutoMapping<Product> mapping)
    {
        mapping.HasMany(product => product.PricingRules); //Not really sure
                                                          // about how to map this.
    } 
Run Code Online (Sandbox Code Playgroud)

我已经看到像http://ayende.com/blog/3941/nhibernate-mapping-inheritance这样的示例用于继承映射.但这些例子实际上并没有解决我所面临的问题.不仅仅是错误,我想知道我应该如何通过流畅的NHibernate映射这个域,最好是使用自动覆盖.

小智 0

要点是,即使对于每个具体类的表方法,您也必须映射基类。只是不是你想的那样。您应该看看这篇精彩的文章:www.codeproject.com/Articles/232034/Inheritance-mapping-strategies-in-Fluent-Nhibernat

它或多或少是这样的:

public class BaseClassMap : ClassMap<BaseClass> {
    public BaseClassMap() {
        // indicates that this class is the base
        // one for the TPC inheritance strategy and that 
        // the values of its properties should
        // be united with the values of derived classes
        UseUnionSubclassForInheritanceMapping();
    }
}

public class SubClass1Map : SubclassMap<SubClass1> {
    public SubClass1Map() {
        Table("SubClass1Table");
        Abstract();
    }
}

public class SubClass2Map : SubclassMap<SubClass2> {
    public SubClass1Map() {
        Table("SubClass2Table");
        Abstract();
    }
}
Run Code Online (Sandbox Code Playgroud)