So müssen Sie Uint in NHiNRNATE mit SQL Server 2005 abbilden
-
11-07-2019 - |
Frage
Ich habe eine Eigenschaft vom Typ Uint auf meinem Unternehmen. Etwas wie:
public class Enity
{
public uint Count {get;set;}
}
Wenn ich versuche, dies in die SQL Server 2005 -Datenbank zu bestehen, bekomme ich eine Ausnahme
Dialekt unterstützt DBTYPE.Uint32 nicht
Was wäre der einfachste Weg, dies zu verarbeiten? Ich könnte es zum Beispiel so lange in der DB speichern. Ich weiß nur nicht, wie ich das Nhibernate erzählen soll.
Lösung
Das sauberste, am offiziellsten Lösung wäre wahrscheinlich, einen Benutzertyp zu schreiben.
Ein Beispiel nehmen wie Dieses hier und passen Sie es an. Wenn Sie viele haben uint
Es lohnt sich, einen Benutzertyp zu haben.
<property name="Prop" type="UIntUserType"/>
Andere Tipps
Ich habe dies nicht sichergestellt, also nicht sicher, ob dies für Sie funktioniert, aber Sie können versuchen, Ihren eigenen Dialekt zu erstellen und dies in der web.config/App.config zu registrieren
Dialektklasse:
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"/>
Sie könnten versuchen, einen weiteren privaten "Mirror" -Property hinzuzufügen.
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"/>
Natürlich sollten Sie das tun nur Wenn es nicht durch die Zuordnung gelöst werden könnte.