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

NHibernate-将一个属性映射到两个或多个字段?,nhibernate,mapping,enums,Nhibernate,Mapping,Enums,我有一个包含两位字段的数据库表:IsEvenSide和isodside。我希望将此映射到以下枚举: [Flags] enum SideOfStreet { None, Even, Odd } 我以前做过IUserType,但我不知道如何映射到多个数据库字段 如何做到这一点 注:我正在使用Fluent NHibernate,但我也可以使用hbm解决方案。我只想知道如何转换它。将数据库字段映射到类中的只读属性: Map(x => x.IsEvenSide); Map(x => x.Is

我有一个包含两位字段的数据库表:
IsEvenSide
isodside
。我希望将此映射到以下枚举:

[Flags] enum SideOfStreet { None, Even, Odd }
我以前做过
IUserType
,但我不知道如何映射到多个数据库字段

如何做到这一点


注:我正在使用Fluent NHibernate,但我也可以使用
hbm
解决方案。我只想知道如何转换它。

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

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和iSeddside的getter,可以将它们标记为private并使用Reveal:

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

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

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和iSeddside的getter,可以将它们标记为private并使用Reveal:

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

哎呀,更正了问题。我从内存中输入了我的问题——真正的系统没有“两个都有”选项,而是使用标志。哎呀,更正了这个问题。我从内存中输入了我的问题——真正的系统没有“两者”选项,而是使用标志。