Я пытаюсь сохранить сопоставленную сущность с помощью NHibernate, но моя вставка в базу данных завершается неудачно, поскольку в базовой таблице есть столбец, который не допускает нулевые значения и НЕ сопоставляется в моем объекте домена. Причина, по которой он не сопоставлен, заключается в том, что данный столбец поддерживает устаревшее приложение и не имеет отношения к моему приложению, поэтому я бы не хотел загрязнять мою сущность устаревшим свойством.
Я знаю, что могу использовать личное поле в своем классе, но мне все равно это неприятно. Я прочитал , что я могу использовать перехватчик NHibernate и переопределить метод OnSave () для добавления в новый столбец непосредственно перед сохранением моей сущности. Это оказывается трудным, поскольку я не могу понять, как добавить экземпляр Nhibernate.type.IType к параметру типов OnSave моего перехватчика.
Моя сущность выглядит примерно так:
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);
}
}
У кого-нибудь есть идеи, как это сделать правильно?