автоматическое сопоставление с UseOverridesFromAssemblyOf не вызывает переопределение классов базового класса

я использую автоматическое сопоставление с 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 — это абстрактный базовый класс. если я использую отдельные переопределяющие классы для каждого подкласса, он работает нормально. Есть ли способ определить переопределение для всех подклассов абстрактного класса?

спасибо,
Джонни


person icts_jhonny    schedule 02.12.2010    source источник


Ответы (1)


хорошо, только что ответил на мой собственный вопрос - моя проблема заключалась в том, что я пытался сопоставить иерархию, начавшуюся с класса Reader, в одну таблицу. но автоматическое сопоставление автоматически игнорирует все абстрактные классы. что я сделал, так это просто добавил это в раздел конфигурации:

.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, использует метод "type.In(...", которого нет в .net 3.5...)
, который работал нормально.
надеюсь, что это поможет...

person icts_jhonny    schedule 02.12.2010