2012-03-22 2 views
0

Я использую NHibernate 3 с базой данных Microsoft SQL Server (2005 и выше). Теперь я ищу способ сообщить NHibernate писать всегда NULL в базу данных вместо пустых строк. Что было бы лучшим способом сделать это? - Или, может быть, есть переключатель в NHibernate для этого? Спасибо за помощь.NHibernate должен всегда писать NULL вместо пустой строки

+3

проверить 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

+0

Привет. Спасибо за ваши ссылки. У меня есть вопрос: я видел, что они работают с Fluent. Я работаю с hbm-сопоставлениями. Будет ли это также работать с hbm-сопоставлениями? – BennoDual

+1

Вы также можете использовать пользовательский IUserType с hbm-сопоставлениями. Пример ' ' – Nikolay

ответ

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())); 

Надежда это то, что вы ищете и помогает вам.