.net sql-server-2005 nhibernate orm uint32

.net - Cómo asignar uint en NHibernate con SQL Server 2005



sql-server-2005 orm (4)

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

Tengo una propiedad de tipo uint en mi entidad. Algo como:

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

Cuando trato de persistir en la base de datos de SQL Server 2005, recibo una excepción

Dialect no es compatible con DbType.UInt32

¿Cuál sería la forma más fácil de solucionar esto? Podría, por ejemplo, almacenarlo tanto tiempo en la base de datos. Solo que no sé cómo decirle eso a NHibernate.


Podría intentar agregar otra propiedad privada "espejo".

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"/>

Por supuesto, debe hacer esto solo si no puede ser resuelto por el mapeo.


No lo he intentado, así que no estoy seguro si esto funcionará para ti, pero podrías intentar crear tu propio dialecto y registrarlo en la web.config / app.config

Clase dialecto:

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>


La solución más limpia y oficial sería escribir un tipo de usuario.

Tome un ejemplo, como este y adáptelo. Si tiene muchos uint ''s, vale la pena tener un tipo de usuario.

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