2010-10-01 81 views
3

我不是NHibernate的/ FNH映射太熱了,但我期待在執行國家模式,像德里克貝利的文章的想法在這裏:功能NHibernate映射 - 狀態模式

我beleive這是前一陣子所以映射代碼是過時的,有人可以幫我一把手來更新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);  
    } 
} 

他的文章是這裏的代碼的其餘部分: http://www.lostechies.com/blogs/derickbailey/archive/2008/11/26/mapping-a-state-pattern-with-nhibernate.aspx

非常感謝您!

Paul

+0

有什麼特別的你正在努力?大部分方法名稱的前綴都被刪除('WithTable' - >'Table'),但這對intellisense來說是相當容易發現的。 – 2010-10-01 11:32:21

+0

我intellisense說,DiscriminateSubClassesOnColumn折舊,我應該使用SubclassMap <> ...我不知道如何使用此。 – 2010-10-01 11:52:43

+0

除了將基類和所有子類放入一個ClassMap中,您將基類的ClassMap作爲每個子類的單獨SubclassMap。鑑別器列的定義仍然在ClassMap中,但鑑別器值在每個SubclassMap中。 – Rich 2010-10-01 19:40:52

回答

1

我正在使用1.1,這是語法。

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...