我正在尝试使用 NHibernate 保存映射的实体,但我对数据库的插入失败,因为基础表的列不允许空值并且未映射到我的域对象中。它没有被映射的原因是因为有问题的列支持遗留应用程序并且与我的应用程序无关 - 所以我不想用遗留属性污染我的实体。
我知道我可以在课堂上使用私有字段 - 但这对我来说仍然令人讨厌。我读过我可以使用 NHibernate 拦截器并覆盖 OnSave() 方法以在保存我的实体之前添加到新列中。事实证明这很困难,因为我不知道如何将 Nhibernate.type.IType 的实例添加到我的拦截器 OnSave 的 types 参数中。
我的实体大致如下所示:
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);
}
}
有人对如何正确执行此操作有任何想法吗?