複数のエンティティで期間クラスを再利用したいと考えています。これは、列名が一貫していない従来のスキーマに基づいています。この 1 つのピリオド クラスを何度か再利用したいので、対応する列名で複数のマッピングを提供することにしました。しかし、nhibernate はコンポーネントであってもエンティティごとに 1 つのマッピングでしか動作しないように見えるため、私の計画はうまくいきませんでした。
このコンポーネントを別の基になる列名で再利用する他の方法はありますか?
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());
}
}