NHibernate创建IMAGE而不是VarBinary(最大)

时间:2011-07-09 14:09:45

标签: nhibernate sql-server-2008 nhibernate-mapping

我在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(最大)。映射有什么问题?

2 个答案:

答案 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>