C# NHibernate 4.0代码映射和有意重复导入

C# NHibernate 4.0代码映射和有意重复导入,c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,如何仅使用NHibernate 4.0和 我需要映射两个共享相同名称的不同类: namespace MyApp.VersionA { public class User{ //omitted properties } } namespace MyApp.VersionB { public class User{ //omitted properties } } 这是我的NHibernate设置方法: var config = new Config

如何仅使用NHibernate 4.0和

我需要映射两个共享相同名称的不同类:

namespace MyApp.VersionA {
    public class User{
    //omitted properties
    }
}
namespace MyApp.VersionB {
    public class User{
    //omitted properties
    }
}
这是我的NHibernate设置方法:

var config = new Configuration();
config.Configure();
var mapper = new ModelMapper();
mapper.AddMappings(GetAllMappingTypes());
config.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());
config.BeforeBindMapping += (sender, args) => args.Mapping.autoimport = false;
Factory = config.BuildSessionFactory();
请注意,我设置了autoimport=false,但仍然从NHibernate获得了一个DuplicateMappingException:

nhibernate.duplicatemappingexception:重复导入:
用户同时引用这两个
MyApp.VersionA,
... 和
MyApp.VersionB.User,
... (尝试使用自动导入=“false”)

亚历山大,试试这个:

        var assemblies =
            AppDomain.CurrentDomain.GetAssemblies().Where(a => a.GetName().Name.Contains(".Infrastructure"));
        foreach (var assembly in assemblies)
        {
            var mapper = new ModelMapper();
            mapper.AddMappings(assembly.GetExportedTypes()
                .Where(t => t.BaseType != null && t.BaseType.IsGenericType &&
                            t.BaseType.GetGenericTypeDefinition() == typeof (ClassMapping<>)));

            var compileMapping = mapper.CompileMappingForAllExplicitlyAddedEntities();
            compileMapping.autoimport = false;

            configuration.AddMapping(compileMapping);
        }
var程序集=
AppDomain.CurrentDomain.GetAssemblys()。其中(a=>a.GetName().Name.Contains(“.Infrastructure”);
foreach(程序集中的变量程序集)
{
var mapper=newmodelmapper();
mapper.AddMappings(assembly.GetExportedTypes()
.Where(t=>t.BaseType!=null&&t.BaseType.IsGenericType&&
t、 BaseType.GetGenericTypeDefinition()==typeof(ClassMapping));
var compileMapping=mapper.CompileMappingForAllExplicitlyAddedEntities();
compileMapping.autoimport=false;
AddMapping(compileMapping);
}

@timss感谢您将其正确格式化!