2009-05-06 3 views
3

У меня есть NVARCHAR столбца в базе данных SQL Server 2005 (2000), и отобразили это в NHibernate, как:Автоматически усечения строки в NHibernate/SQL Server

<property name="Query" column="`Query`" type="String" length="2000" not-null="false"/> 

Класс DTO только представляет свойство строки:

public virtual string Query { get; set; } 

Если я установить запрос в строку> 2000 символов я получаю исключение от сервера SQL к эффекту:

"Строковые или двоичные данные будут усечены. Заявление было прекращено.»

То, что я хочу, чтобы это усечение просто произойдет автоматически и незаметно. Я мог бы переопределить виртуальную собственность и заставить усечение на наборе свойств, но чувствует, что должно быть способом чтобы получить такое поведение по умолчанию, либо с помощью отображения NHibernate или даже в качестве параметра SQL-сервера.

я упускаю что-нибудь ... Я не хочу, чтобы изменить схему дб, чтобы более длинные строки.

ответ

4

Создайте пользовательский тип пользователя и усекайте строку, если она длиннее 2000 символов. Вот пример creating User Type

<property name="Query" type="Common.Nhibernate.Types.StringTruncType, Common" column="`Query`" type="String" length="2000" not-null="false"/>