2016-09-26 5 views
0

Ich kann das aktualisierte Element in ListView nicht erhalten, nachdem das vorhandene Datenbankelement geändert wurde. Wenn ich jedoch die Anwendung neu lade, kann man das aktualisierte Element in ListView sehen.So aktualisieren Sie den Kontext im Entitätsframework

Ich habe auf ein ObservableCollection binded für die ListView

Das ist meine Schnittstelle

public interface IService 
{ 
    IEnumerable<Employee> GetDetails(); 
    IEnumerable<Employee> GetDetailsById(int MatchID); 
} 

I IService IEmployeeServiceData Klasse implementiert haben.

public class IEmployeeServiceData:IService 
{ 
    private EmployeeContext Context 
    { 
     get; 
     set; 
    } 

    public IEmployeeServiceData() 
    { 
     Context = new EmployeeContext(); 
    } 

    public IEnumerable<Model.Employee> GetDetails() 
    { 
     return Context.Employees; 
    } 

    public IEnumerable<Model.Employee> GetDetailsById(int MatchID) 
    { 
     var q = from f in Context.Employees 
       where f.EMPLOYEE_ID == MatchID 
       select f; 
     return q.AsEnumerable(); 
    } 
} 

Dies ist meine VM

public void RefereshData() 
    { 

     var e = EmployeeService.GetDetails(); 

     if (SelectedIndexValue == 1) 
     { 
      var Data = from e1 in e 
         where e1.LOCATION == "Pune" 
         select e1; 
      EmployeeMasterData = new ObservableCollection<Model.Employee>(Data); 
     } 

     else if(SelectedIndexValue==2) 
     { 
      var Data = from e1 in e 
         where e1.LOCATION == "Bangalore" 
         select e1; 
      EmployeeMasterData = new ObservableCollection<Model.Employee>(Data); 
     } 

     else 
     { 
      EmployeeMasterData = new ObservableCollection<Model.Employee>(e); 
     } 
    } 

Aktualisierung verlassen Item:

public void UpdateEmployee() 
    { 
     try 
     { 

      Context = new EmployeeContext(); 
      Employee Emp = Context.Employees.First(i => i.EMPLOYEE_ID == FindId1); 
      Emp.FIRST_NAME = this.FIRSTNAME; 
      Emp.FAMILY_NAME = this.FAMILY_NAME; 
      Emp.EXTERNAL_ID = this.EXTERNALID; 
      Emp.DB_SPONSOR = this.DBSPONSOR; 
      Emp.LEGAL_ENTITY = this.LEGAL_ENTITY; 
      Emp.COST_CENTER = this.COST_CENTER1; 
      Emp.STATUS = this.StatusCategory; 
      Emp.ENTRY_DATE = this.ENTRYDATE; 
      Emp.LOCATION = this.LocationCategory1; 
      Context.SaveChanges(); 
      Clear(); 
      AlertMessage1 = "Employee Record is Updated Sucessfulyy !!!"; 
      IsVisible1 = true; 
      timer.Start(); 

     } 
     catch(Exception ex) 
     { 
      Console.WriteLine(ex.InnerException); 
     } 
    } 

Existing Item

Updated Item

+0

Hat 'EmployeeMasterData' ein Ereignis zum Ändern der Benachrichtigungseigenschaft? – OmegaMan

+0

ja Ich habe @OmegaMan implementiert –

+0

Implementiert 'Mitarbeiter'' INotifyPropertyChanged'? – OmegaMan

Antwort

0

Änderungen an einem entit getan y in Entity Framework wird nicht auf dem Bildschirm angezeigt, da die beiden Instanzen in Ihrem Beispiel nicht sind. Ja, die haben die gleichen Werte, aber sie sind zwei verschiedene eindeutige reference Speicherorte. ** Für die ObservableCollection ist eine Kopie der Liste und nicht die tatsächliche Liste in Ihrem Beispiel manipuliert.

Daher sind sie nicht verwandt.


eine Änderung Um Ihnen diese Möglichkeiten:

  1. Ändern der eigentliche Objekt ‚s-Eigenschaft (en) durch die beobachtbaren Sammlung hielt den Wechsel in die anderen getan zu spiegeln EF-Einheit Außerdem muss sich die EF-Entität an INotifyPropertyChange halten oder auch die Änderung der Dateneigenschaften wird nicht auf dem Bildschirm angezeigt.
  2. Oder löschen Sie die Bildschirmeinheit und fügen Sie die geänderte Entität in die Liste ein.
  3. Oder löschen Sie die gesamte beobachtbare Liste und fügen Sie sie erneut mit der neuesten Version von EF hinzu. (Sie erwähnen, dass Sie dies tun, und das ist auch eine Option).
Verwandte Themen