NHibernate - есть ли смысл устанавливать атрибут длины для свойств / столбцов? - PullRequest
3 голосов
/ 10 марта 2009

обычно определение свойства / столбца выглядит так:

<property name="DocumentSummary" column="DocumentSummary" length="100" type="String">
   <column name="DocumentSummary" />
</property>

Я предполагал, что NHibernate проверит данные с использованием атрибута длины перед вставкой / обновлением строки. К сожалению, это неверное предположение. Итак, вопрос в том, использует ли NHibernate атрибут длины для чего-либо? Имеет ли смысл устанавливать его для каждого свойства?

Ответы [ 3 ]

4 голосов
/ 10 марта 2009

Он использует его для создания базы данных определения sql. Посмотрите на класс SchemaExport.

1 голос
/ 10 марта 2009

Также вы можете программно извлекать длины из отображений, см. этот вопрос. Обратите внимание, что это для Java Hibernate, но я думаю, что вы можете перевести это в NHibernate.

0 голосов
/ 09 июня 2017

Да, если задать свойство Length, то у вас будут строковые столбцы, длина которых превышает максимальную длину по умолчанию.

У нас есть столбец типа NVARCHAR(MAX). Если мы не установим свойство length, NHibernate не сможет установить строковое значение, если значение будет иметь длину более 4096 символов.

(В этом примере используется Mapping-By-Code, потому что мы находимся в 2017 году: -)

classMapper.Property(
                        tickerFeed => tickerFeed.StaticTickerText,
                        propertyMapper =>
                        {
                             propertyMapper.Column("StaticTickerText");
                             propertyMapper.Length(int.MaxValue);
                        }
                    );

Однако мы обнаружили, что можем достичь того же результата, используя IPropertyMapper.Type, чтобы указать, что это большая строка.

classMapper.Property(
                        tickerFeed => tickerFeed.StaticTickerText,
                        propertyMapper =>
                        {
                             propertyMapper.Column("StaticTickerText");
                             propertyMapper.Type(NHibernateUtil.StringClob);
                        }
                    );

В итоге мы выбрали вариант propertyMapper.Type, так как он более явный.

...