2011-01-05 2 views
1

Таким образом у меня есть файл сопоставления NHibernate со следующим свойством:NHibernate строковое свойство атрибута длины

<property name="FullName" column="FullName" type="string" not-null="true" /> 

Если установить длину = «50», например, NHibernate будет обрезать строку при вставке в базу данных. Если я удалю свойство length, эта база данных выдает исключение, как должно; говоря, что он не может вставить запись. Это нормальное поведение? Если да, то какова цель свойства length. Возможно, я неправильно настроил NHibernate или не оценил ситуацию. Любые мысли/идеи были бы замечательными.

ответ

5

Свойство Length используется для создания базы данных из модели/сопоставлений при использовании схемы экспорта.

Если вы ищете проверку длины строки во время сохранения, взгляните на проект NHibernate.Validator.

http://nhforge.org/blogs/nhibernate/archive/2009/05/01/nhibernate-validator.aspx

+0

Причины я поймал этот вопрос, потому что я писал модульный тест, чтобы проверить, что вставка потерпит неудачу, если длина строки FullName превышала 50 символов. Он не прерывался и усекал строку перед вставкой в ​​базу данных. Как только я удалил атрибут length в файле сопоставления, он потерпел неудачу. – dolphy

+1

NHibernate (как и любые другие ORM) использует параметризованные запросы. Когда вы задаете длину строки 50 для поля/свойства, она использует nvarchar (50) вместо nvarchar (4000). Это приводит к усечению строк вместо отказа. –

+0

Спасибо, Дмитрий. – dolphy

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