Есть ли способ игнорировать базовый тип / класс по пространству имен в автоматическом сопоставлении Fluent NHibernate? - PullRequest
0 голосов
/ 19 ноября 2010

В настоящее время я использую следующий код для игнорирования базовых типов с помощью автоматического отображения Fluent NHibernate:

AutoMap.AssemblyOf<Class1>(new MyDefaultAutomappingConfiguration())
            .Conventions.Setup(GetConventions())
            .IgnoreBase<MyCore.BaseTypes.AmazingBaseType>()
            .IgnoreBase<MyCore.BaseTypes.AnotherAmazingBaseType>()
            .UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>();

Есть ли способ игнорировать базовые типы по пространству имен (то есть MyCore.BaseTypes) вместо необходимостииспользовать метод IgnoreBase() для каждого базового типа, который у меня есть?

Я пытался выполнить это, используя мой переопределенный метод ShouldMap(Type) в DefaultAutomappingConfiguration расширенном классе (то есть MyDefaultAutomappingConfiguration), чтобы выполнить это, но он все еще пыталсядля сопоставления базовых типов:

public class MyDefaultAutomappingConfiguration: DefaultAutomappingConfiguration {
    public override bool ShouldMap(Type type) {
        return !IsBaseType(type);
    }

    private bool IsBaseType(Type type) {
        return type.Namespace == typeof(MyCore.BaseTypes).Namespace;
    }
}

Ответы [ 3 ]

1 голос
/ 20 ноября 2010

Если ваши базовые типы являются абстрактными, они не будут включены в отображение.

1 голос
/ 21 ноября 2010

Вы можете сделать это прямо в вашей конфигурации следующим образом:

AutoMap.AssemblyOf<Class1>(new MyDefaultAutomappingConfiguration())
            .Conventions.Setup(GetConventions())
            .Where(t => t.Namespace != "MyCore.BaseTypes")
            .UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>();
1 голос
/ 19 ноября 2010

Как выглядит MyAutomappingConfiguration?Вы можете переопределить ShouldMap(Type) чем-то вроде:

public override bool ShouldMap(System.Type type)
{
  return 
    type.BaseType.Namespace == typeof (MyCore.BaseTypes.BaseIWant).Namespace;
}
...