2012-04-17 58 views
0

我想在多个实体上重用一个Period类。它基于列名称不一致的传统模式。 因为我想多次重复使用这个期间课程,所以我认为我提供了与他们的通讯员列名的多个映射。但是我的计划没有奏效,因为nhibernate似乎只对每个实体都有一个映射,即使它是一个组件。通过代码重用与不同列的nhibernate组件映射

是否有任何其他方式来重用此组件具有不同的基础列名称?

public class Period 
{ 
    public virtual DateTime From {get;set;} 
    public virtual DateTime To {get;set;} 
} 


public class PeriodMapping 
{ 
    public static Action<IComponentMapper<Period>> ForPolicy() 
    { 
     return c => 
     { 
      c.Property(p => p.From, map => map.Column("CommencementDate")); 
      c.Property(p => p.To, map => map.Column("ReasonForEnding")); 
     }; 
    } 

    public static Action<IComponentMapper<Period>> ForPasswordOfUser() 
    { 
     return c => 
     { 
      c.Property(p => p.From, map => map.Column("PasswordValidFrom")); 
      c.Property(p => p.To, map => map.Column("PasswordValidUntil")); 
     }; 
    } 

    // several other mappings 
} 

public class PolicyMapping : ClassMapping<Policy> 
{ 
    public VertragMapping() 
    { 
     Component(a => a.Period, PeriodMapping.ForPolicy()); 
    } 
} 

public class UserMapping : ClassMapping<User> 
{ 
    public VertragMapping() 
    { 
     Component(a => a.Period, PeriodMapping.ForPasswordOfUser()); 
    } 
} 

回答

0

你可以尝试这样做。

public class PeriodMapping 
{ 
    public static Action<ComponentPart<Period>> ForPolicy() 
    { 
     return c => 
     { 
      c.Map(p => p.From, "CommencementDate"); 
      c.Map(p => p.To, "ReasonForEnding"); 
     }; 
    } 

    public static Action<ComponentPart<Period>> ForPasswordOfUser() 
    { 
     return c => 
     { 
      c.Map(p => p.From, "PasswordValidFrom"); 
      c.Map(p => p.To, "PasswordValidUntil"); 
     }; 
    } 

    // several other mappings 
}