Конечные пробелы в nchar приводят к тому, что в nHibernate запись выглядит грязной - PullRequest
2 голосов
/ 20 сентября 2010

Я обнаружил, что всякий раз, когда я загружаю объект из моей базы данных, он сразу же становится грязным.

Я нашел код, который позволит мне увидеть, не загрязнен ли объект: http://nhforge.org/wikis/howtonh/finding-dirty-properties-in-nhibernate.aspx

var x = session.Get<MyRecord>(123);
var dirtyEntity = session.IsDirtyEntity(x);

dirtyEntity всегда имеет значение true для сущностей этого класса.

Рассматривая это немного больше, я думаю, что я нашел корень проблемы. У меня есть свойство, которое отображается на столбец nchar (15) в SQL Server. Значение в БД имеет конечные пробелы, но значение, отображаемое в объекте, было обрезано. Итак ... следующее возвращает true.

var x = session.Get<MyRecord>(123);
var dirtyProperty = session.IsDirtyProperty(x, "Status");

Кто-нибудь знает, как я могу заставить nHibnernate сказать, что «Состояние в норме» и «Состояние в норме» равнозначны и что объект не является грязным?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2010

Почему бы вам не использовать varchar в качестве типа данных в базе данных для указанного столбца. Это решит вашу проблему, а также предотвратит потерю места в базе данных.

1 голос
/ 20 сентября 2010

Это можно решить с помощью IUserType для свойства. В UNHAddins есть пример TrimString ; Вы можете прочитать о его использовании здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...