0

目前,我正在使用以下代码来忽略具有 Fluent NHibernate 自动映射的基本类型:

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

有没有办法通过命名空间(即MyCore.BaseTypes)忽略基本类型,而不必为IgnoreBase()我拥有的每个基本类型使用该方法?

我尝试使用-extended 类(即)中的重写ShouldMap(Type)方法来完成此操作,但它仍然尝试映射基本类型:DefaultAutomappingConfigurationMyDefaultAutomappingConfiguration

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;
    }
}
4

3 回答 3

1

您可以直接在您的配置中执行此操作,如下所示:

AutoMap.AssemblyOf<Class1>(new MyDefaultAutomappingConfiguration())
            .Conventions.Setup(GetConventions())
            .Where(t => t.Namespace != "MyCore.BaseTypes")
            .UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>();
于 2010-11-20T22:19:46.473 回答
1

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

public override bool ShouldMap(System.Type type)
{
  return 
    type.BaseType.Namespace == typeof (MyCore.BaseTypes.BaseIWant).Namespace;
}
于 2010-11-19T18:53:15.053 回答
1

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

于 2010-11-20T01:11:46.777 回答