27 votes

NHibernate Fluent entité HasMany collections de différents types de sous-classe

Si tout fonctionne bien avec le discriminateur de base de la cartographie. Je peux interagir directement avec les entités A et B sans aucun problème.

public class BaseType {}
public class EntityA : BaseType {}
public class EntityB : BaseType {}

Cette cartes sans drame dans le BaseType cartographie

DiscriminateSubClassesOnColumn<string>("Type")
               .SubClass<BaseType>("A", m => { })
               .SubClass<BaseType>("B", m => { });

Le problème se produit lorsque: dans un agrégat nous voulons carte des collections pour chaque sous-classe

À l'aide de la cartographie comme ci-dessous

public class AggregateMap: BaseMap<Aggregate>
{
        public AggregateMap()
        {
                HasMany<EntityA>(x => x.ACollection).AsSet().Cascade.All();
                HasMany<EntityB>(x => x.BCollection).AsSet().Cascade.All();            
        }
}

Bien sûr, ces arent plein mappages mais le montant minimum pour un décrivez ce que je cherche. Les éléments ajoutés ACollection et BCollection sont conservées correctement par le biais de la cascade lorsque le regroupement est sauvé. Toutefois, lorsque le total est extrait, il ya confusion sur le type de discrimination.

J'ai couru à travers tant de différentes solutions possibles, je ne sais plus ce qui n'a pas de travail. J'ai l'impression que je ne devrait pas fournir une clause where sur les collections, mais les choses ne sont tout simplement pas de travail pour moi.

Des indices serait appréciée.

1voto

Iain Points 3903

Vous cartographie semble étrange, en particulier, je pense qu'il devrait regarder plus comme ça

DiscriminateSubClassesOnColumn<string>("Type")
               .SubClass<EntityA>("A", m => { })
               .SubClass<EntityB>("B", m => { });

Cela dit, il semble que la méthode est dépréciée et vous devez définir les éléments suivants (tirés de mappant automatiquement les sous-classes:

public class ParentMap : ClassMap<Parent>
{
  public ParentMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);

    DiscriminateSubClassesOnColumn("type");
  }
}

public class ChildMap : SubclassMap<Child>
{
  public ChildMap()
  {
    Map(x => x.AnotherProperty);
  }
} 

Pas sûr que cela va bien fixer, je suis pas encore à la rencontre de votre scénario.

Edit: La question est également soulevée ici, sonnant plus comme un bug pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X