当两个类具有相同名称但名称空间不同时,NHibernate DuplicateMappingException

我的域模型root中有一个类,如下所示:

namespace Domain { public class Foo { ... } } 

我还在另一个名称空间中有另一个具有相同名称的类:

 namespace Domain.SubDomain { public class Foo { ... } } 

对于我的映射,我有一个Mapping目录,其子目录名为SubDomain ,其中包含Domain.SubDomain命名空间中找到的域类的映射。 他们都在同一个集会中。

但是,当我尝试使用NHibernate加载它们时,我不断收到DuplicateMappingException …即使两个Foos都有不同的命名空间。 我用来加载我的NHibernate配置的代码是这样的:

 var cfg = new Configuration() .Configure() .AddAssembly("Domain"); 

我如何告诉NHibernate让我使用两个具有相同名称(但名称不同的名称空间)的实体?

我在Hibernate网站上找到了答案 :

如果您有两个具有相同非限定名称的持久化类,则应设置auto-import =“false”。 如果尝试将两个类分配给相同的“导入”名称,则会导致exception。

我使用它作为标记的属性并且它起作用。

我曾经也有过一样的问题。 我这样解决了:

 Fluently.Configure() .Database(MsSqlConfiguration.MsSql2008 .ConnectionString(...) .AdoNetBatchSize(500)) .Mappings(m => m.FluentMappings .Conventions.Setup(x => x.Add(AutoImport.Never())) .AddFromAssembly(...) .AddFromAssembly(...) .AddFromAssembly(...) .AddFromAssembly(...)) ; 

导入的部分是: .Conventions.Setup(x => x.Add(AutoImport.Never())) 。 这个配置似乎一切正常。

您可以在映射文档中指定类完全限定名称,如下所示:

  ... 

SeeMe.Data是程序集。