Pergunta

O que é a melhor maneira de obter o comportamento inverso do tipo YesNo booleana no mapeamento NHibernate?

Eu quero 'Y' para false média e 'N' para dizer verdade.

Existe um tipo Noyes? Você escreve um tipo personalizado? algo realmente fácil?

Esta questão da necessidade de reverter o booleana existe em pelo menos um campo em mais de 40 mesas. Tentando adaptar-se a um banco de dados legado.

Foi útil?

Solução

Eu descobri que lidar com formatos de dados estranhos em bancos de dados legados pode ser facilmente alcançada através da implementação de tipos personalizados. Por exemplo, eu recentemente fez um tipo de usuário simples para mapear DateTime 8 números de dígitos do yyyyMMdd forma, que passou a ser a forma como as datas foram armazenados em um depósito de DB2 eu tive que usar.

Los Techies tem um exemplo na implementação IUserType que você pode usar para resolver o seu problema: Mapeamento de Cordas para Booleans usando do NHibernate IUserType .

Outras dicas

Eu tive um problema semelhante. A solução mais fácil que eu encontrei foi estender o CharBooelanType do NHibernate e usar o novo tipo no mapeamento. Seria assim:

using NHibernate.Type;
using NHibernate.SqlTypes;

namespace MyAssembly.MyNamespace 
{
    public class NewBoolType : CharBooleanType 
    {
        public NewBoolType()
            : base(new AnsiStringFixedLengthSqlType(1)) { }

        protected override string TrueString 
        {
            get { return "N"; }
        }

        protected override string FalseString 
        {
            get { return "Y"; }
        }

        public override string Name 
        {
            get { return "inverted_bool"; }
        }
    }
}

E o mapeamento seria assim:

<property name="MyProperty" column="MyColumn" type="MyAssembly.MyNamespace.NewBoolType, MyAssembly" />
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top