我在MS SQL Server 2008中使用了不久的NHibernate Mapping(NH 3.2)(设置MsSql2008Dialect):
<class name="Layout" table="Layout" lazy="false" >
<cache usage="read-write"/>
<id name="Id" column="Id" type="Guid">
<generator class="assigned"/>
</id>
<version name="ObjectVersion" column="ObjectVersion"/>
<property name="Key" column="Key" type="String" length="255" not-null="true" />
<property name="Value" column="Value" type="BinaryBlob" length="2147483647" />
<property name="Created" column="Created" type="Timestamp" not-null="true" optimistic-lock="false" />
<property name="CreatedBy" column="CreatedBy" type="String" length="255" not-null="true" optimistic-lock="false" />
<property name="Changed" column="Changed" type="Timestamp" optimistic-lock="false" />
<property name="ChangedBy" column="ChangedBy" type="String" length="255" optimistic-lock="false" />
<many-to-one name="User" class="User" foreign-key="FK_User_Layout" lazy="proxy" fetch="select">
<column name="UserId"/>
</many-to-one>
</class>
问题在于,对于Column Value,NHibernate将创建一个Image of Field。但我需要VarBinary(最大)。映射有什么问题?
答案 0 :(得分:3)
从3.1版迁移到3.2后,我遇到了同样的问题。 我认为这是一个错误。 我已经探索了源代码版本3.1和3.2,并发现了一些改变了MsSqlDialect *类的初始化序列的差异。 我通过创建dialect类的后代并重写方法“RegisterLargeObjectTypeMappings”来修复它
public class MyMsSql2008Dialect : MsSql2008Dialect
{
protected override void RegisterLargeObjectTypeMappings()
{
base.RegisterLargeObjectTypeMappings();
base.RegisterColumnType(DbType.Binary, 2147483647, "VARBINARY(MAX)");
}
}
答案 1 :(得分:2)
试试这个
<property name="Value">
<column name="Value" sql-type="varbinary(max)" />
</property>