Fluent NHibernate映射-状态模式

Fluent NHibernate映射-状态模式,nhibernate,fluent-nhibernate,nhibernate-mapping,state-pattern,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,State Pattern,我对NHibernate/FNH映射不太感兴趣,但我正在研究如何实现状态模式,并且喜欢Derick Bailey的文章: 我想这是很久以前的事了,所以映射代码已经过时了,有人能帮我更新FNH 1.1吗 public class OrderStatusMap: ClassMap<OrderStatus> { public OrderStatusMap() { CreateMap(); } public void CreateMap() {

我对NHibernate/FNH映射不太感兴趣,但我正在研究如何实现状态模式,并且喜欢Derick Bailey的文章:

我想这是很久以前的事了,所以映射代码已经过时了,有人能帮我更新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);    
   }
}
public类OrderStatusMap:ClassMap
{
public OrderStatusMap()
{
CreateMap();
}
public void CreateMap()
{
DefaultAccess.AsProperty();
WithTable(“订单状态”);
Id(s=>s.Id).GeneratedBy.Assigned();
DiscriminateSubClassesOnColumn(“名称”)
.第()子类
.IsIdentifiedBy(OrderStatus.InProcess.Name)
.MapSubassColumns(x=>{})
.第()子类
.IsIdentifiedBy(OrderStatus.Total.Name)
.MapSubassColumns(x=>{})
.第()子类
.IsIdentifiedBy(OrderStatus.Tendered.Name)
.MapSubassColumns(x=>{})
.第()子类
.IsIdentifiedBy(OrderStatus.Delivered.Name)
.MapSubassColumns(x=>{})
Map(s=>s.Name);
}
}
下面是他的文章,介绍代码的其余部分:

多谢各位


Paul

我使用的是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...
public类OrderStatusMap:ClassMap
{
public OrderStatusMap()
{
DefaultAccess.AsProperty();
WithTable(“订单状态”);
Id(s=>s.Id).GeneratedBy.Assigned();
Map(s=>s.Name);
区分子类别子列(“名称”);
}
}
进程状态映射中的公共类:子类映射
{
公共InProcessStatusMap()
{
鉴别器值(OrderStatus.InProcess.Name);
}
}
公共类TotaledStatusMap:子类映射
{
公共TotaledStatusMap()
{
鉴别器值(OrderStatus.TotaledStatus.Name);
}
}
等

您有什么特别的困难吗?大多数方法名称的前缀都被删除了(
WithTable
->
Table
),但这在intellisense中是可以发现的。我的intellisense说DiscriminateSubClassesOnColumn被贬低了,我应该使用SubclassMap…我不知道如何使用它。与其将基类和所有子类放在一个类映射中,基类有一个类映射,每个子类有一个单独的子类映射。鉴别器列定义仍在类映射中,但鉴别器值在每个子类映射中。