如何在Listener中识别属性自定义类型?

时间:2015-09-03 14:50:59

标签: c# encryption nhibernate fluent-nhibernate

我们在某些属性映射中使用自定义类型( IUserType )来加密数据库中的数据,我们使用侦听器( IPostUpdateEventListener,IPostDeleteEventListener,IPostInsertEventListener )来记录一些实体的变化,它在实体属性中的所有基础来决定是否需要日志。问题是没有加密就会记录加密属性。

使用 IEntityPersister 或其他来源,是否有办法识别女巫属性是否已加密(使用我们的自定义类型)?

    private string GetValue(ISession session, object[] stateArray, int index, IEntityPersister persister)
    {
        try
        {
            return stateArray[index] == null || stateArray[index].ToString() == string.Empty
                ? "< No value >"
                : stateArray[index].ToString();
        }
        catch (Exception e)
        {
            Trace.Write(string.Format("Error \"{0}[{1}]\": {2}", persister.EntityName, persister.PropertyTypes[index],
                e));
            return "< No value >";
        }
    }
...
    public void OnPostInsert(PostInsertEvent @event)
    {
        var res = GetValue(session, @event.State, i, @event.Persister);
...

1 个答案:

答案 0 :(得分:0)

Firo解决方案有效:

...
if (Persistor.PropertyTypes[i] is CustomType && (Persistor.PropertyTypes[i] as CustomType).UserType is MyUserType)
    return "Encrypted";
...