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

cdm*_*kay 25 .net c# nhibernate orm nhibernate-mapping

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

namespace Domain
{
  public class Foo { ... }
}
Run Code Online (Sandbox Code Playgroud)

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

namespace Domain.SubDomain
{
  public class Foo { ... }
}
Run Code Online (Sandbox Code Playgroud)

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

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

var cfg = new Configuration()
  .Configure()                
  .AddAssembly("Domain");   
Run Code Online (Sandbox Code Playgroud)

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

cdm*_*kay 24

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

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

我使用它作为<hibernate-mapping>标签的属性,它工作.


Til*_*nJH 17

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

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

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