1

У меня следующая ситуация:Свободный автопилота Nhibernate. Ассоциация относится к неподключенному базовому классу

AssemblyX с БД лиц ссылается внешним assemblyY и использовать свои классы в качестве базовых классов.AssemblyX добавляет некоторые свойства навигации, если необходимо.

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

Итак, у меня есть Foo {} класс в assemblyY и создать Bar: Foo {} в assemblyX. Настройте свободное автопилотирование, чтобы игнорировать Foo (.IgnoreBase<Foo>()). Все работает хорошо. Но assemblyY имеет другое юридическое лицо 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) 
} 

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

Заранее благодарим за любые советы.

ответ

0

Вы можете использовать собственный 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(); 
Смежные вопросы