2010-10-01 5 views
3

Je ne suis pas trop chaud sur NHibernate/FNH Mapping mais je suis à la recherche à la mise en œuvre du modèle d'état et comme l'idée de l'article de Derick Bailey ici:Courant NHibernate Cartographie - Etat Motif

Je beleive c'était il y a un certain temps donc le code de mappage est obsolète, quelqu'un peut-il me donner un coup de main pour le mettre à jour pour FNH 1.1?

public class OrderStatusMap: ClassMap<OrderStatus> 
{ 
    public OrderStatusMap() 
    { 
     CreateMap(); 
    } 

    public void CreateMap() 
    { 
     DefaultAccess.AsProperty(); 
     WithTable("OrderStates"); 
     Id(s => s.Id).GeneratedBy.Assigned(); 

     DiscriminateSubClassesOnColumn<string>("Name") 
      .SubClass<InProcessStatus>() 
       .IsIdentifiedBy(OrderStatus.InProcess.Name) 
       .MapSubClassColumns(x => { }) 

      .SubClass<TotaledStatus>() 
       .IsIdentifiedBy(OrderStatus.Totaled.Name) 
       .MapSubClassColumns(x => { }) 

      .SubClass<TenderedStatus>() 
       .IsIdentifiedBy(OrderStatus.Tendered.Name) 
       .MapSubClassColumns(x => { }) 

      .SubClass<DeliveredStatus>() 
       .IsIdentifiedBy(OrderStatus.Delivered.Name) 
       .MapSubClassColumns(x => { }) 

     Map(s => s.Name);  
    } 
} 

Son article est là pour le reste du code: http://www.lostechies.com/blogs/derickbailey/archive/2008/11/26/mapping-a-state-pattern-with-nhibernate.aspx

Merci beaucoup!

Paul

+0

Y at-il quelque chose en particulier avec lequel vous avez des difficultés? La plupart des noms de méthodes ont leurs préfixes supprimés ('WithTable' ->' Table'), mais cela est assez facile à détecter avec intellisense. –

+0

mon intellisense dit que DiscriminateSubClassesOnColumn est déprécié et je devrais utiliser SubclassMap <> ... je ne suis pas sûr comment utiliser ceci. –

+0

Au lieu de placer la classe de base et toutes les sous-classes dans un ClassMap, vous avez ClassMap pour la classe de base une SubclassMap distincte pour chacune des sous-classes. La définition de la colonne discriminante est toujours dans ClassMap, mais la valeur du discriminateur se trouve dans chaque sous-classe. – Rich

Répondre

1

J'utilise 1.1 et c'est la syntaxe.

public class OrderStatusMap: ClassMap<OrderStatus> 
{ 
    public OrderStatusMap() 
    { 
      DefaultAccess.AsProperty(); 
      WithTable("OrderStates"); 
      Id(s => s.Id).GeneratedBy.Assigned(); 
      Map(s => s.Name); 
      DiscriminateSubClassesOnColumn<string>("Name"); 
    } 
} 

public class InProcessStatusMap : SubclassMap<InProcessStatus> 
{ 
    public InProcessStatusMap() 
    { 
     DiscriminatorValue(OrderStatus.InProcess.Name); 
    } 
} 

public class TotaledStatusMap : SubclassMap<TotaledStatus> 
{ 
    public TotaledStatusMap() 
    { 
     DiscriminatorValue(OrderStatus.TotaledStatus.Name); 
    } 
} 

etc... 
Questions connexes