I have a class in my domain model root that looks like this:
namespace Domain
{
public class Foo { ... }
}
I also have another class with the same name in a different namespace:
namespace Domain.SubDomain
{
public class Foo { ... }
}
For my mappings, I have a Mapping
directory with a subdirectory called SubDomain
that contains mappings for the domain classes found in Domain.SubDomain
namespace. They are all in the same assembly.
However, when I try to load them with NHibernate, I keep getting a DuplicateMappingException
... even though both Foos having different namespaces. The code I am using to load my NHibernate configuration is this:
var cfg = new Configuration()
.Configure()
.AddAssembly("Domain");
How can I tell NHibernate to let me use two entities with the same name (but different namespaces)?
I found the answer on the Hibernate website:
If you have two persistent classes
with the same unqualified name, you
should set auto-import="false". An
exception will result if you attempt
to assign two classes to the same
"imported" name.
I used that as an attribute for the <hibernate-mapping>
tag and it worked.
I have had the same problem. I solved it like this:
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(...)
.AdoNetBatchSize(500))
.Mappings(m => m.FluentMappings
.Conventions.Setup(x => x.Add(AutoImport.Never()))
.AddFromAssembly(...)
.AddFromAssembly(...)
.AddFromAssembly(...)
.AddFromAssembly(...))
;
The imported part is: .Conventions.Setup(x => x.Add(AutoImport.Never()))
.
Everything seems to be working fine with this configuration.
You can specify a classes fully qualified name in the mapping document like so:
<class name="SeeMe.Data.People.Relationship, SeeMe.Data" ... > ...
Where SeeMe.Data is the assembly.