NHibernate создать ИЗОБРАЖЕНИЕ вместо VarBinary (макс) - PullRequest
1 голос
/ 09 июля 2011

Я использую следующее отображение NHibernate (NH 3.2) с MS SQL Server 2008 (установите 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>

Проблема здесь в том, что для значения столбца NHibernate создаст поле IMAGE. Но мне нужен VarBinary (макс). Что не так с отображением?

Ответы [ 2 ]

3 голосов
/ 26 января 2012

У меня такая же проблема после перехода с версии 3.1 на 3.2.Я думаю, что это ошибка.Я изучил исходный код версий 3.1 и 3.2 и обнаружил некоторую разницу, которая изменила последовательность инициализации для классов MsSqlDialect *.Я исправил это, создав потомок класса диалект и переопределив метод "RegisterLargeObjectTypeMappings"

public class MyMsSql2008Dialect : MsSql2008Dialect
{
    protected override void RegisterLargeObjectTypeMappings()
    {
        base.RegisterLargeObjectTypeMappings();
        base.RegisterColumnType(DbType.Binary, 2147483647, "VARBINARY(MAX)");
    }
}    
2 голосов
/ 26 января 2012

Попробуйте это

<property name="Value">
    <column name="Value" sql-type="varbinary(max)" />
</property>
...