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

时间:2009-07-20 22:19:59

标签: c# .net nhibernate orm nhibernate-mapping

我的域模型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让我使用两个具有相同名称(但名称空间不同)的实体?

3 个答案:

答案 0 :(得分:23)

我在Hibernate网站上找到了answer

  

如果你有两个持久类   你用同样不合格的名字   应该设置auto-import =“false”。一个   如果您尝试,将导致异常   将两个类分配给同一个   “进口”名称。

我将其用作<hibernate-mapping>标记的属性并且有效。

答案 1 :(得分:16)

我遇到了同样的问题。我这样解决了:

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()))。 这种配置似乎一切正常。

答案 2 :(得分:3)

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

<class name="SeeMe.Data.People.Relationship, SeeMe.Data" ... > ...

SeeMe.Data是程序集。