2009-07-20 41 views
23

我在我的域模型根类,看起来像这样:NHibernate的DuplicateMappingException当两个类具有相同的名称,但不同的命名空间

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的让我用两个实体名称相同(但不同的命名空间)?凡SeeMe.Data是组装

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

+0

如果它可以帮助任何人:同样的问题Fluent.nHibernate:https://stackoverflow.com/questions/1290466/ – Malcolm 2017-12-09 00:40:02

回答

22

我发现answer Hibernate网站上:

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

我用它作为<hibernate-mapping>标记的属性,它工作。

3

你可以像这样指定映射文档中的类全名。

+1

仍然说:`NHibernate.DuplicateMappingException:重复导入:Foo同时指的是Domain.SubDomain.Foo, Domain,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null和Domain.Foo,Domain,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null(尝试使用自动导入=“false”)` – cdmckay 2009-07-20 22:41:31

+1

Dammit,一旦我复制并粘贴,我看到`auto-import =“false”`建议......并且它工作。 – cdmckay 2009-07-20 22:44:30

+1

hehe saight,nHibernate岩石,但我觉得它不是很直观。我花了很多时间在一些愚蠢的映射问题上抨击我的头脑。 – 2009-07-20 22:59:26

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

相关问题