是否可以通过c#中的值获取属性

时间:2016-06-10 20:57:12

标签: c# hibernate reflection

我有这个代码,我用fluent suppressernate中的currentState比较oldState对象的值,我想要的是记录已经改变的属性及其值,这里我得到新的和旧的值但是我想还要获取属性名称。

如果我反映@event.Entity我可以获取所有属性及其值,那么有没有办法通过其值获取属性名称。

public void OnPostUpdate(NHibernate.Event.PostUpdateEvent @event)
{
    var entityToAudit = @event.Entity as IAuditable;
    string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AuditLog.txt");
    using (StreamWriter sw = File.AppendText(path))
    {
        for (int i = 0; i < @event.OldState.Length; i++)
        {
            if (@event.OldState[i] != null)
            {
                if (!@event.OldState[i].Equals(@event.State[i]))
                {
                    sw.WriteLine("the value has ben changed from " + @event.OldState[i] + " to " + @event.State[i]);
                }
            }
            else
            {
                if (@event.State[i] != null)
                {
                    sw.WriteLine("the value has ben changed from being empty to " + @event.State[i]);
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您不需要使用System.ReflectionPostUpdateEvent已按您需要的顺序包含所有属性名称:

var propertyName = e.Persister.PropertyNames[i];