Свободное сопоставление NHibernate — шаблон состояния

Я не слишком разбираюсь в NHibernate/FNH Mapping, но я смотрю на реализацию шаблона состояния, и мне нравится идея статьи Дерика Бейли здесь:

Я полагаю, что это было некоторое время назад, поэтому код сопоставления устарел, может ли кто-нибудь помочь мне обновить его для 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

Большое тебе спасибо!

Павел


person Paul Hinett    schedule 01.10.2010    source источник
comment
Есть ли что-то конкретное, с чем вы боретесь? У большинства имен методов были опущены префиксы (WithTable -> Table), но с помощью intellisense это легко обнаружить.   -  person James Gregory    schedule 01.10.2010
comment
мой интеллект говорит, что DiscriminateSubClassesOnColumn устарел, и я должен использовать SubclassMap‹›... я не уверен, как это использовать.   -  person Paul Hinett    schedule 01.10.2010
comment
Вместо того, чтобы помещать базовый класс и все подклассы в один ClassMap, у вас есть ClassMap для базового класса и отдельный SubclassMap для каждого из подклассов. Определение столбца дискриминатора все еще находится в ClassMap, но значение дискриминатора находится в каждом SubclassMap.   -  person Rich    schedule 01.10.2010


Ответы (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...
person Mark Perry    schedule 23.05.2011