0

无论如何检查实体的属性是否改变了它的值,即在 DataServiceContext 中?我需要获取这些属性的名称。

我首先在模型上工作。

4

1 回答 1

0

我不能用 INPC,因为我不知道如何处理未知属性,但我做了一个比较:

 public static class VistaEntityManager 
{
   static object _EntityInicial, _EntityFinal;

    public static object EntityFinal
    {
        get { return _EntityFinal; }
        set {
            Type tipo = ((object)value).GetType();
            _EntityFinal = Activator.CreateInstance(tipo);
            foreach (PropertyInfo pi in _EntityFinal.GetType().GetProperties())
            {
                pi.SetValue(_EntityFinal, pi.GetValue(value, null), null);
            }
        }
    }

    public static object EntityInicial
    {
        get { return _EntityInicial; }
        set
        {
            Type tipo = ((object)value).GetType();
            _EntityInicial = Activator.CreateInstance(tipo);
            foreach (PropertyInfo pi in _EntityInicial.GetType().GetProperties())
            {
                pi.SetValue(_EntityInicial, pi.GetValue(value, null), null);
            }
        }
    }
    /// <summary>
    /// Retorna as propriedades que tiveram seus valores alterados.
    /// </summary>
    /// <exception cref="EntityInicial e EntityFinal nulas"></exception>
    /// <exception cref="Entidades com tipos diferentes"></exception>
    /// <returns></returns>
    public static List<string> PropriedadesAlteradas()
    {
        if (_EntityFinal == null || _EntityInicial == null)
            throw new ArgumentNullException("A Entidade Final ou a Entidade Inicial está nula.");
        if (_EntityFinal.GetType() != _EntityInicial.GetType())
            throw new ArgumentException("Os tipos das entidades são diferentes.");

        List<string> propriedades = new List<string>();
        foreach (PropertyInfo p in _EntityInicial.GetType().GetProperties())
        {
            if (!Object.Equals(p.GetValue(_EntityInicial, null), p.GetValue(_EntityFinal, null)))
                propriedades.Add(p.Name);
        }
        return propriedades;
    }
}
于 2013-06-06T19:22:33.210 回答