使用UseOverridesFromAssemblyOf进行自动映射不会调用覆盖的基类类

时间:2010-12-02 09:14:48

标签: nhibernate fluent-nhibernate automapping

我正在使用流畅的nHibernate自动化,非常简单,就像这样:

Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2008
            .ConnectionString(c => c
                .Server("(local)\\sql2008")
                .Database("nHibernate_test")
                .TrustedConnection()))
            .Mappings(m => m.AutoMappings.Add(
                AutoMap.AssemblyOf<Domain.Airport>(cfg)
                .UseOverridesFromAssemblyOf<ReaderMappingOverride>()
                ))

我的重写类是这样的:

public class ReaderMappingOverride : IAutoMappingOverride<Domain.Reader>
{
    public void Override(AutoMapping<Domain.Reader> mapping)
    {
        //use the reader ID as identifier of the class, instead of the ID field defined in superclass Entity
        mapping.IgnoreProperty(r => r.Id);
        mapping.Id(r => r.ReaderNumber);
    }
}

其中Reader是抽象基类。 如果我为每个子类使用单独的重写类,它可以正常工作。 有没有办法为抽象类的所有子类定义覆盖?

感谢,
的Jhonny

1 个答案:

答案 0 :(得分:0)

好的,刚刚回答了我自己的问题 - 我的问题是我试图将一个以Reader类开头的heirarchy映射到一个表中。但自动映射会自动忽略所有抽象类。我所做的只是将其添加到配置部分:

.Mappings(m => m.AutoMappings.Add(
                AutoMap.AssemblyOf<Domain.Airport>(cfg)
                .IncludeBase<Domain.Reader>()

这是我的配置类

public override bool IsDiscriminated(Type type)
    {
       //this line indicates that the readers heirarchy should be all in one table, instead of seperate tables for every type of reader
        bool ret = type.IsSubclassOf(typeof(Domain.Reader)) || type == typeof(Domain.Reader) ;
        return ret;
    }

(顺便说一下,在Fluent nHibernate的网站上给出的例子使用的方法是“.in(...”,在.net 3.5中不存在...)
工作得很好。
希望这会有所帮助...