2016-01-13 14 views
1

我怎样才能得到这个工作只使用NHibernate 4.0和CoCNHibernate 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 =假的,但我还是从NHibernate得到一个DuplicateMappingException:

nhibernate.duplicatemappingexception:重复导入:
用户指的是
MyApp.VersionA,
...和
MyApp.VersionB.User,
...(建议使用自动导入= “假”)

+0

@非常感谢你的格式正确! – Alexander

回答

1

亚历山大,试试这个:

 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); 
     } 
+0

我想了解为什么我的方式不起作用! – Alexander