我的实体上有一个 uint 类型的属性。就像是:
public class Enity
{
public uint Count {get;set;}
}
当我尝试将其持久保存到 SQL Server 2005 数据库中时,出现异常
方言不支持 DbType.UInt32
解决此问题的最简单方法是什么。例如,我可以将它存储在数据库中。我只是不知道如何告诉 NHibernate。
我的实体上有一个 uint 类型的属性。就像是:
public class Enity
{
public uint Count {get;set;}
}
当我尝试将其持久保存到 SQL Server 2005 数据库中时,出现异常
方言不支持 DbType.UInt32
解决此问题的最简单方法是什么。例如,我可以将它存储在数据库中。我只是不知道如何告诉 NHibernate。
最干净、最官方的解决方案可能是编写用户类型。
举个例子,像这个并适应它。如果您有很多uint
's,则值得拥有一个用户类型。
<property name="Prop" type="UIntUserType"/>
没有尝试过,所以不确定这是否适合您,但您可以尝试创建自己的方言并在 web.config/app.config 中注册
方言类:
public class MyDialect:MsSql2005Dialect
{
public MyDialect()
{
RegisterColumnType(System.Data.DbType.UInt32, "bigint");
}
}
网络配置:
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"/>
您可以尝试添加另一个私有“镜像”属性。
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"/>
当然,只有在映射无法解决时才应该这样做。