A questão diz tudo, o padrão é mapear como um, string
mas eu preciso mapear como um int
.
Atualmente estou usando PersistenceModel
para definir minhas convenções, se isso fizer alguma diferença. Desde já, obrigado.
Atualização Descobriu que obter a versão mais recente do código do tronco resolveu meus problemas.
nhibernate
fluent-nhibernate
Garry Shutler
fonte
fonte
Respostas:
A maneira de definir essa convenção mudou algumas vezes atrás, é agora:
fonte
Então, como mencionei, tirar a versão mais recente do Fluent NHibernate do porta-malas me levou aonde eu precisava estar. Um exemplo de mapeamento para um enum com o código mais recente é:
O tipo personalizado força-o a ser tratado como uma instância do enum em vez de usar o
GenericEnumMapper<TEnum>
.Na verdade, estou pensando em enviar um patch para poder alterar entre um mapeador enum que persiste uma string e um que persiste um int, pois isso parece algo que você deve ser capaz de definir como uma convenção.
Isso apareceu na minha atividade recente e as coisas mudaram nas versões mais recentes do Fluent NHibernate para tornar isso mais fácil.
Para fazer com que todos os enums sejam mapeados como inteiros, agora você pode criar uma convenção como esta:
Então, seu mapeamento só precisa ser:
Você adiciona a convenção ao seu mapeamento do Fluent NHibernate assim;
fonte
Não se esqueça dos enums anuláveis (como
ExampleEnum? ExampleProperty
)! Eles precisam ser verificados separadamente. É assim que é feito com a nova configuração de estilo FNH:fonte
int
? E quando o tipo aceita Sinalizadores? Como:MyEnum.Active | MyEnum.Paused
foi assim que mapeei uma propriedade enum com um valor int:
funciona para mim!
fonte
Para aqueles que usam o Fluent NHibernate com Automapping (e potencialmente um contêiner IoC):
Essa
IUserTypeConvention
é a resposta de @ Julien acima: https://stackoverflow.com/a/1706462/878612A configuração de Automapeamento Fluent NHibernate pode ser configurada assim:
* Então, o
CreateSessionFactory
pode ser utilizado em um IoC como o Castle Windsor (usando um PersistenceFacility e instalador) facilmente. *fonte
Você pode criar um NHibernate
IUserType
e especificá-lo usandoCustomTypeIs<T>()
no mapa de propriedades.fonte
Você deve manter os valores int / tinyint em sua tabela de banco de dados. Para mapear seu enum, você precisa especificar o mapeamento corretamente. Por favor, veja o mapeamento abaixo e a amostra de enum,
Classe de Mapeamento
Enum
fonte