NHibernate - 将一个属性映射到两个或多个字段?

时间:2010-02-16 21:09:11

标签: nhibernate mapping enums

我有一个包含两位字段的数据库表:IsEvenSideIsOddSide。我想将其映射到以下枚举:

[Flags] enum SideOfStreet { None, Even, Odd }

我过去做过IUserType,但我不知道如何映射到多个数据库字段。

如何做到这一点?

P.S。:我正在使用Fluent NHibernate,但我也可以使用hbm解决方案。我只想弄清楚如何转换它。

1 个答案:

答案 0 :(得分:1)

将数据库字段映射为只读类中的属性:

Map(x => x.IsEvenSide);
Map(x => x.IsOddSide);

通过公共财产控制它们:

[使用标志枚举的修订版]

public class Example
{

    public IsEvenSide { get; private set; }
    public IsOddSide { get; private set; }

    public SideOfStreet SideOfStreet
    {
        get
        {
            var side = SideOfStreet.None;
            if (IsEvenSide) { side |= SideOfStreet.Even; }
            if (IsOddSide) { side |= SideOfStreet.Odd; }
            return side;
        }
        set
        {
            IsEvenSide = (value & SideOfStreet.Even) == SideOfStreet.Even;
            IsOddSide = (value & SideOfStreet.Odd) == SideOfStreet.Odd;
        }
    }
}

如果您不想公开IsEvenSide和IsOddSide的getter,可以将它们标记为私有并使用Reveal:

Map(Reveal.Property<Example>("IsEvenSide"));