10

Me pregunto algo. Estoy sentado aquí con una solución. Tengo 1 superclase que tiene 2 subclases y estoy mapeando esto usando JoinSubClass, pero entiendo que este método es obsoleto, y dice que debería usar ClassMap y SubClassMap, pero si hago esto el AutoMapping no funciona, y no quiero eso. ¿Hay alguna solución para esto?Fluido NHibernate JoinedSubClass obsoleto

Aquí está la jerarquía:

public class Tag : Entity 
{ 

public virtual string Name {get;set;} 
public virtual User User {get;set;} 

} 

public class RespondentTag : Tag 
{ 
    public virtual IList<Respondent> Respondents {get;set;} 
} 


public class ArchiveTag : Tag 
{ 
    public virtual IList<Survey> Surveys {get;set;} 
} 

Como probablemente averiguado que quiero que esto sea una tabla por jerarquía de mapeo con subclases con listas que son Muchos-A-Muchos. Como una tabla 'Tag', luego Tag_Respondent y Tag_Archive (para la relación de muchos a muchos).

Ésta es la asignación que actualmente estoy usando:

public class TagMap : IAutoMappingOverride<Tag> 
{ 
    public void Override(AutoMapping<Tag> mapping) 
    { 
    //This is obsolete 
    mapping.JoinedSubClass("RespondentTagId", RespondentTagMap.AsJoinedSubClass()); 
    mapping.JoinedSubClass("ArchiveTagId", ArchiveTagMap.AsJoinedSubClass()); 

    } 
} 

public class RespondentTagMap 
{ 
    public static Action<JoinedSubClassPart<RespondentTag>> AsJoinedSubClass() 
    { 
    return part => 

     part.HasManyToMany(x => x.RespondentList) 
      .Cascade 
      .SaveUpdate() 
      .Inverse() 
      .Table("Tag_Respondent"); 

    } 
} 


public class ArchiveTagMap 
{ 
    public static Action<JoinedSubClassPart<ArchiveTag>> AsJoinedSubClass() 
    { 
    return part => 

     part.HasManyToMany(x => x.Surveys) 
      .Cascade 
      .SaveUpdate() 
      .Inverse() 
      .Table("Tag_Archive"); 

    } 
} 

¿Alguien sabe acerca de una solución u otra solución para resolver esto? (Sin deshabilitar la automatización)

Cualquier respuesta será apreciada.

¡Gracias de antemano!

+0

¿Alguna vez ha funcionado? Me estoy encontrando con problemas similares tratando de conseguir que funcione una tabla por subclase mixta y jerarquía de tabla por clase. – rbellamy

+0

¿sigues teniendo este problema? ¿Qué versión de FNH usaste? – Firo

Respuesta

1

Perdóneme si no entiendo bien su objetivo, pero voy a echar un vistazo a esto ya que tengo una herencia similar en mi proyecto (aunque utilizo un patrón de tabla por clase base con una columna de discriminador).

Creo que se puede lograr lo que usted está buscando hacer por tener FNH caso omiso de su clase Tag base, a continuación, anulando el mapeo de sus RespondentTag y ArchiveTag objetos para poner en práctica la relación de muchos a muchos. Así que en la configuración de la HNF, usted especificar un argumento a su llamado de asignaciones:

m.AutoMappings.Add(AutoMap.AssemblyOf<SomeObjectInMyAssembly>(new MyAutoMapConfig()) // Assuming you're using a config class 
    .IgnoreBase(typeof(Entity)) 
    .IgnoreBase(typeof(Tag)) 
    .UseOverridesFromAssemblyOf<SomeOverrideClass>()); 

Entonces será necesario configurar las anulaciones en cualquier montaje que los está almacenando. Usted tendría algo como esto:

public class RespondentTagOverride : IAutoMappingOverride<RespondentTag> 
{ 
    public void Override(AutoMapping<RespondentTag> mapping) 
    { 
     mapping.HasManyToMany(x => x.RespondentList) 
      .Cascade 
      .SaveUpdate() 
      .Inverse() 
      .Table("Tag_Respondent"); // Not sure if the table call works in the override...you may have to use a convention for this 
    } 
} 

Lo mismo para el objeto ArchiveTag.

Eso es similar a lo que hago en mi esquema de herencia, aunque como mencioné, en mi clase de configuración de automap anulo el método IsDiscriminated para indicar que mis objetos son de tabla por clase base y discriminados.

Cuestiones relacionadas