2010-02-16 3 views
1

У меня есть таблица базы данных, которая включает в себя два битовых поля: IsEvenSide и IsOddSide. Я хочу, чтобы это отобразить в следующем перечислении:NHibernate - Сопоставление одного объекта с двумя или более полями?

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

Я сделал IUserType «S в прошлом, но я не знаю, как отобразить на несколько полей базы данных.

Как это можно сделать?

P.S .: Я использую Fluent NHibernate, но я в порядке с решением hbm. Я просто выясню, как его преобразовать.

ответ

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, вы можете отметить их приватными и использовать Reveal:

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

Ух, исправил вопрос. Я напечатал свою проблему из памяти - у реальной системы нет опции Both и использует флаги. –

Смежные вопросы