Como mapear o UINT em Nibernate com o SQL Server 2005
-
11-07-2019 - |
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.
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 uint
S, 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 só Se não pudesse ser resolvido pelo mapeamento.