当两个类具有相同名称但名称空间不同时,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是程序集。