автоматическое сопоставление с UseOverridesFromAssemblyOf не вызывает переопределяющие классы базового класса - PullRequest
0 голосов
/ 02 декабря 2010

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

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

1 Ответ

0 голосов
/ 02 декабря 2010

хорошо, только что ответил на мой собственный вопрос- Моя проблема заключалась в том, что я пытался отобразить иерархию, которая начиналась с класса 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 ...)
это работало нормально.
надеется, что это поможет ...

...