NHibernate DuplicateMappingException cuando dos clases tienen el mismo nombre pero diferentes espacios de nombres


Tengo una clase en la raíz de mi 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 Mapping con un subdirectorio llamado SubDomain que contiene asignaciones para las clases de dominio que se encuentran en el espacio de nombres Domain.SubDomain. Todos están en la misma asamblea.

Sin embargo, cuando intento cargarlos con NHibernate, sigo obteniendo un DuplicateMappingException... a pesar de que ambos Foos tienen diferentes espacios de nombres. El código que estoy usando para cargar mi configuración de NHibernate es el siguiente:

var cfg = new Configuration()
  .Configure()                
  .AddAssembly("Domain");   

¿Cómo puedo decirle a NHibernate que me permita usar dos entidades con el mismo nombre (pero diferentes espacios de nombres)?

Author: cdmckay, 2009-07-21

3 answers

Encontré la respuesta en el sitio web de Hibernación:

Si tiene dos clases persistentes con el mismo nombre no calificado, usted debe establecer auto-import= "false". Un se producirá una excepción si intenta para asignar dos clases a la misma nombre "importado".

Lo utilicé como un atributo para la etiqueta <hibernate-mapping> y funcionó.

 22
Author: cdmckay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-29 18:21:38

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.

 16
Author: TiltonJH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-29 07:57:27

Puede especificar un nombre completo de clases en el documento de asignación de la siguiente manera:

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

Donde SeeMe.Los datos son el ensamblaje.

 3
Author: Spencer Ruport,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-20 22:26:44