Свободное автоматическое отображение Nhibernate. Ассоциация относится к несопоставленному базовому классу.

У меня следующая ситуация:

AssemblyX с сущностями db ссылается на внешнюю сборку Y и использует ее классы в качестве базовых классов. AssemblyX добавляет некоторые свойства навигации, если это необходимо.

Конечно, я могу скопировать все это и использовать autopper для решения моей проблемы, но у меня есть причина наследовать существующие сущности.

Так что я Foo {} класс в AssemblyY и создать Bar: Foo {} в сборке X. Настройте беглое автоматическое отображение, чтобы игнорировать Foo (.IgnoreBase<Foo>()), Все работает хорошо Но у сборки Y есть другая сущность Rab (который покрыт беглым автоотображением), который имеет свойство навигации, которое относится к Foo, Это вызывает исключение: "Ассоциация из таблицы Rab относится к несопоставленному классу: Foo".

public class Foo // .IgnoreBase<Foo>() - I require only derived Bar in DB
{
    public virtual Guid Id {get; set;}        
}

public class Bar: Foo
{
    public virtual Guid Id {get; set;}
    // Some new properties
}

public class Rab
{
    public virtual Guid Id {get; set;}
    public virtual Foo Foo // reference to unmapped class, I could not change type to Bar (external assembly)
}

Как я могу решить это. Я пытался унаследовать Раб и создать new Foo свойство с типом бара, но безуспешно.

Спасибо заранее за любые советы.

1 ответ

Вы можете использовать пользовательский IAutomappingConfiguration, чтобы определить, какой тип или член должен быть отображен:

class MyConfig : DefaultAutomappingConfiguration
        {
            public override bool ShouldMap(Type type)
            {
                return  !(typeof(Foo)).IsAssignableFrom(type);
            }

            public override bool ShouldMap(Member member)
            {
                return  !(typeof(Foo)).IsAssignableFrom(member.PropertyType);                }
        }

Тогда вы можете использовать свой конфиг так:

AutoPersistenceModel model = new AutoPersistenceModel(new MyConfig());

И наконец:

Fluently.Configure()

                    .Mappings(m => m.UsePersistenceModel(model))
                    .BuildSessionFactory();
Другие вопросы по тегам