2013-06-05 64 views
0

是否有無論如何檢查實體的屬性是否已將其值更改,即DataServiceContext中?我需要獲取這些屬性的名稱。數據服務獲取實體(EF 4.0)已更改屬性

我首先在模型上工作。

+0

服務器端或客戶端?客戶端上的 – Aron

+0

。 –

+0

查看了'DataServiceContext'文檔。它看起來並不像它跟蹤哪些屬性發生了變化。 – Aron

回答

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; 
    } 
} 
相關問題