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