2010-02-16 2 views
1

J'ai une table de base de données qui inclut un champs de deux bits: IsEvenSide et IsOddSide. Je veux que cela la carte à l'ENUM suivante:NHibernate - Mappage d'une propriété à deux champs ou plus?

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

Je l'ai fait IUserType « s dans le passé, mais je ne sais pas comment la carte à des champs de bases de données multiples.

Comment cela peut-il être fait?

P.S.: J'utilise Fluent NHibernate, mais je suis également d'accord avec une solution hbm. Je vais juste comprendre comment le convertir.

Répondre

1

Carte des champs de la base de propriétés en lecture seule dans votre classe:

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

Et les contrôler par une propriété publique:

[version révisée de travailler avec l'énumération de drapeau]

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; 
     } 
    } 
} 

Si vous ne souhaitez pas exposer les getters pour IsEvenSide et IsOddSide, vous pouvez les marquer comme privés et utiliser Reveal:

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

Oups, a corrigé la question. J'ai tapé mon problème de la mémoire - le vrai système n'a pas une option les deux et utilise des drapeaux. –

Questions connexes