有没有办法在Fluent NHibernate自动化中忽略命名空间的基类型/类?

时间:2010-11-19 18:44:26

标签: .net nhibernate fluent-nhibernate automapping

目前,我使用以下代码忽略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 个答案:

答案 0 :(得分:1)

MyAutomappingConfiguration看起来像什么?您可以使用以下内容覆盖ShouldMap(Type)

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

答案 1 :(得分:1)

如果您的基本类型是抽象的,则它们不会包含在映射中。

答案 2 :(得分:1)

您可以直接在您的配置中执行此操作:

AutoMap.AssemblyOf<Class1>(new MyDefaultAutomappingConfiguration())
            .Conventions.Setup(GetConventions())
            .Where(t => t.Namespace != "MyCore.BaseTypes")
            .UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>();