Я использую NHibernate 3 с базой данных Microsoft SQL Server (2005 и выше). Теперь я ищу способ сообщить NHibernate писать всегда NULL в базу данных вместо пустых строк. Что было бы лучшим способом сделать это? - Или, может быть, есть переключатель в NHibernate для этого? Спасибо за помощь.NHibernate должен всегда писать NULL вместо пустой строки
0
A
ответ
0
Вы можете добавить PreInsertEventListener и переопределить функцию, чтобы выполнить необходимое преобразование пустой строки в значение NULL.
Путь идти об этом будет:
public class NhibernateEventListeners : IPreInsertEventListener
{
public bool OnPreInsert(PreInsertEvent nHibernateEvent)
{
var entityBeingInserted = nHibernateEvent.Entity;
if (entityBeingInserted == null)
return false;
if (property.PropertyType==typeof(string))
{
//use reflection to set the property value to null
}
return false;
}
}
и при настройке SessionFactory убедитесь, что вы добавить следующие строки в конфигурации
_config.ExposeConfiguration(
config => config.SetListener(ListenerType.PreInsert, new NhibernateEventListeners()));
Надежда это то, что вы ищете и помогает вам.
проверить http://stackoverflow.com/questions/2592556/how-to-have-nhibernate-persist-a-string-empty-property-value-as-null, а также http://stackoverflow.com/questions/1187841/mapping-empty-strings-to-null-in-nhibernate – V4Vendetta
Привет. Спасибо за ваши ссылки. У меня есть вопрос: я видел, что они работают с Fluent. Я работаю с hbm-сопоставлениями. Будет ли это также работать с hbm-сопоставлениями? – BennoDual
Вы также можете использовать пользовательский IUserType с hbm-сопоставлениями. Пример ' ' –
Nikolay