通过代码重用不同列进行 NHIBERNATE 组件映射

本文关键字:NHIBERNATE 组件 映射 代码 | 更新日期: 2023-09-27 18:31:20

我想在几个实体上重用一个周期类。它基于列名不一致的旧架构。由于我想在多个场合重用这个周期类,我想我提供了多个映射及其对应的列名。但是我的计划没有奏效,因为 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());
    }
}

通过代码重用不同列进行 NHIBERNATE 组件映射

你可以尝试这样做。

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
}