Пользовательские карты Fluent NHibernate не работают с AutoMapping - PullRequest
2 голосов
/ 19 октября 2011

У меня проблема с Fluent NHibernate AutoPersistenceModelGenerator. Он не хочет подбирать пользовательские карты.

Использование Sharp Architecture 2.0, Fluent NHibernate 1.2 и NHibernate 3.1.

Моя текущая соответствующая конфигурация выглядит следующим образом:

    public AutoPersistenceModel Generate()
    {
        // This mappings group works with the exception of custom maps!!
        var mappings = AutoMap.AssemblyOf<SecurableEntity>(new AutomappingConfiguration());
        mappings.Conventions.Setup(GetConventions());
        mappings.IgnoreBase<Entity>();
        mappings.IgnoreBase<SecurableEntity>();
        mappings.IgnoreBase(typeof(EntityWithTypedId<>));
        mappings.UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>();

        //mappings.UseOverridesFromAssemblyOf<UserMap>(); // Should call Override method of UserMap, but doesn't appear to...
        mappings.Override<User>(new UserMap().Override()); // This hack fixes the issue with calling the Override method of UserMap.
        mappings.UseOverridesFromAssemblyOf<UserMap>();

        return mappings;
    }

class UserMap : IAutoMappingOverride<User>
{
    public void Override(AutoMapping<User> mapping)
    {
        //mapping => mapping.Table("Users");
        mapping.Table("Users");
    }

    public Action<AutoMapping<User>> Override()
    {
        return map =>
            {
                map.Table("Users");
            };
    }
}

Я пытался внести различные изменения в конфигурацию и пролистать интернет-статьи о Fluent NHibernate, но безрезультатно. У меня есть рабочая версия, использующая Sharp Arch 1.x и более ранние версии NHibernate и Fluent. Я предполагаю, что произошло изменение в синтаксисе, который я пропускаю. Любая помощь будет принята с благодарностью.

Спасибо! John

1 Ответ

4 голосов
/ 20 октября 2011

Свободное использование NHibernate. Используйте Assembly.GetExportedTypes() метод , чтобы получить все переопределения из данной сборки.Как сказано в документации этого метода, он получает типы public , определенные в этой сборке, которые видимы вне сборки.Ваше переопределение неявно внутреннее .Просто добавьте public перед class UserMap, и оно будет работать.

...