c# - tipo - NHibernate DuplicateMappingException cuando dos clases tienen el mismo nombre pero diferentes espacios de nombres
no se puede encontrar el tipo o el nombre de espacio de nombres c# (3)
Encontré la answer en el sitio web de Hibernate:
Si tiene dos clases persistentes con el mismo nombre no calificado, debe establecer auto-import = "false". Se producirá una excepción si intenta asignar dos clases al mismo nombre "importado".
Usé eso como un atributo para la etiqueta <hibernate-mapping>
y funcionó.
Tengo una clase en mi raíz de modelo de dominio que se ve así:
namespace Domain
{
public class Foo { ... }
}
También tengo otra clase con el mismo nombre en un espacio de nombres diferente:
namespace Domain.SubDomain
{
public class Foo { ... }
}
Para mis asignaciones, tengo un directorio de Mapping
con un subdirectorio llamado SubDomain
que contiene asignaciones para las clases de dominio que se encuentran en el espacio de nombres Domain.SubDomain
. Están todos en la misma asamblea.
Sin embargo, cuando trato de cargarlos con NHibernate, sigo recibiendo una DuplicateMappingException
... aunque ambos Foos tengan diferentes espacios de nombres. El código que estoy usando para cargar mi configuración de NHibernate es este:
var cfg = new Configuration()
.Configure()
.AddAssembly("Domain");
¿Cómo puedo decirle a NHibernate que me permita usar dos entidades con el mismo nombre (pero con diferentes espacios de nombres)?
He tenido el mismo problema. Lo resolví así:
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(...)
.AdoNetBatchSize(500))
.Mappings(m => m.FluentMappings
.Conventions.Setup(x => x.Add(AutoImport.Never()))
.AddFromAssembly(...)
.AddFromAssembly(...)
.AddFromAssembly(...)
.AddFromAssembly(...))
;
La parte importada es: .Conventions.Setup(x => x.Add(AutoImport.Never()))
. Todo parece estar funcionando bien con esta configuración.
Puede especificar un nombre completo de la clase en el documento de mapeo así:
<class name="SeeMe.Data.People.Relationship, SeeMe.Data" ... > ...
Donde SeeMe.Data es el ensamblaje.