Я пытаюсь сохранить преобразованный объект с помощью NHibernate, но моя вставка в базу данных завершается с ошибкой, потому что в базовой таблице есть столбец, который не разрешает NULL и НЕ отображается в моем объекте домена. Причина, по которой он не отображается, заключается в том, что рассматриваемый столбец поддерживает устаревшее приложение и не имеет никакого отношения к моему приложению - поэтому я бы не стал загрязнять мою сущность унаследованным свойством.NHibernate добавить неотображенный столбец в перехватчик
Я знаю, что могу использовать частное поле внутри своего класса, но это все еще кажется мне неприятным. У меня есть read, что я могу использовать перехватчик NHibernate и переопределить метод OnSave(), чтобы добавить в новый столбец прямо до того, как мой объект будет сохранен. Это сложно, поскольку я не могу решить, как добавить экземпляр Nhibernate.type.IType к параметрам типов OnSave моего перехватчика.
My Entity примерно выглядит следующим образом:
public class Client
{
public virtual int Id { get; set; }
public virtual int ParentId { get; set; }
public virtual string Name { get; set; }
public virtual string Phone { get; set; }
public virtual string Email { get; set; }
public virtual string Url { get; set; }
}
И мой перехватчик
public class ClientInterceptor : EmptyInterceptor
{
public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, NHibernate.Type.IType[] types)
{
if (entity is Client)
{
/*
manually add the COM_HOLD column to the Client entity
*/
List<string> pn_list = propertyNames.ToList();
pn_list.Add("COM_HOLD");
propertyNames = pn_list.ToArray();
List<Object> _state = state.ToList();
_state.Add(false);
state = _state.ToArray();
//somehow add an IType to types param ??
}
return base.OnSave(entity, id, state, propertyNames, types);
}
}
Кто-нибудь есть какие-либо идеи о том, как сделать это правильно?
Я не боюсь - NHibernate.Type.BooleanType и все остальное в этом пространстве имен имеет частный конструктор, что делает его невозможным для обычного обычным способом. Я предполагаю, что вам нужно использовать какой-то другой NHibernate API для создания объектов. –
Попробуйте NHibernateUtil.Boolean. –
Спасибо, Стюарт - это сделал трюк. Я удалил частное поле из моего класса сущности, и я могу без проблем встать в таблицу. –