0

複数のエンティティで期間クラスを再利用したいと考えています。これは、列名が一貫していない従来のスキーマに基づいています。この 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());
    }
}
4

1 に答える 1

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
}
于 2012-10-10T23:42:57.377 に答える