2012-04-14 6 views
4

Я использую следующее отображение для хранения сериализации объекта SQL Server 2008:NHibernate: Магазин VARBINARY в MAX

<class name="EMSApplication.Data.Domain.Configuration, EMSApplication.Data" table="ems_Configurations" proxy="EMSApplication.Data.Domain.IConfiguration, EMSApplication.Data" lazy="true"> 
    <id name="Id" type="System.Int32"> 
    <column name="Id" not-null="true"/> 
    <generator class="native"/> 
    </id> 
    <property name="Settings" type="Serializable"> 
    <column name="Settings" not-null="true"/> 
    </property> 
</class> 

Это порождает VARBINARY (8000) для типа столбца базы данных. Как я могу заставить его использовать varbinary (max)?

Если я использую:

<property name="Settings" type="Serializable" length="2147483647"> 
    <column name="Settings" not-null="true"/> 
</property> 

Он также усекается до 8000. Я использую NHibernate3.2 (не свободно).

ответ

4

Согласно документации NHibernate, «длина» не является атрибут/свойства < собственности >, но вместо этого следует использовать в < колонки >.

В этом разделе показано, что «длина» не является частью < собственности >: http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-property

В этом разделе показано, что «длина» является частью < колонны >: http://nhibernate.info/doc/nh/en/index.html#toolsetguide-s1-2

Этот последний раздел (20.1 и таблица 20.1 Summary) показывает, что «sql-type» также входит в колонку < >, поэтому попробуйте один из следующих вариантов:

<property name="Settings" type="Serializable"> 
    <column name="Settings" not-null="true" length="2147483647"/> 
</property> 

или

<property name="Settings" type="Serializable"> 
    <column name="Settings" not-null="true" sql-type="varbinary(max)"/> 
</property> 

Edit:
Этот вопрос, кажется, дубликат:
How do I get fluent nhibernate to create a varbinary(max) field in sql server

, но эта информация почти 3 лет, и новая версия NHibernate, возможно, с поправкой на это (у меня нет возможности проверить это).

Следующая страница отображается также и тот же вопрос и гораздо позднее:
Binary Blob truncated to 8000 bytes - SQL Server 2008/varbinary(max)

+0

большое спасибо ... –

+0

... в любое время рад, что работал :) –

Смежные вопросы