Pergunta

Eu tenho uma propriedade do tipo uint na minha entidade. Algo como:

public class Enity
{
   public uint Count {get;set;}
}

Quando tento persistir isso no banco de dados do SQL Server 2005, recebo uma exceção

O dialeto não suporta dbtype.uint32

Qual seria a maneira mais fácil de alternar isso. Por exemplo, eu poderia armazená -lo o tempo todo no banco de dados. Eu só não sei como dizer isso a Nibernate.

Foi útil?

Solução

O mais limpo, mais oficial A solução provavelmente seria escrever um tipo de usuário.

Dê um exemplo, como Este e adaptá -lo. Se você tiver muitos uintS, vale a pena ter um tipo de usuário.

<property name="Prop" type="UIntUserType"/>

Outras dicas

Não tentei isso, então não tenho certeza se isso funcionará para você, mas você pode tentar criar seu próprio dialeto e registrar isso no web.config/app.config

Classe de dialeto:

public class MyDialect:MsSql2005Dialect
{
    public MyDialect()
    {            
        RegisterColumnType(System.Data.DbType.UInt32, "bigint");            
    }
}

Web.config:

configuration>
 <configSections>
  <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
 </configSections>

                <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
   <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider, NHibernate</property>
   <property name="connection.connection_string">
    Server=127.0.0.1; Initial Catalog=thedatabase; Integrated Security=SSPI
   </property>
   <property name="dialect">MyDialect</property>
   <property name="current_session_context_class">managed_web</property>
  </session-factory>
 </hibernate-configuration>
    <!-- other app specific config follows -->

</configuration>
<property name="Prop" type="long"/>

Você pode tentar adicionar outra propriedade privada de "espelho".

public class Enity
{
   public uint Count {get;set;}

   private long CountAsLong 
   { 
     get { return Convert.ToInt64(Count); } 
     set { Count = Convert.ToUInt(value); }
   }
}

<property name="CountAsLong" type="long"/>

Claro que você deve fazer isso Se não pudesse ser resolvido pelo mapeamento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top