如何在Entity框架中刷新Context

时间:2016-09-26 15:38:23

标签: wpf entity-framework mvvm

修改现有数据库项后,我无法在ListView中获取更新项。但是,一旦我重新加载应用程序,就可以在ListView中看到更新的项目。

我已ObservableCollection

绑定到ListView

这是我的界面

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

我已经实现了IService IEmployeeServiceData类。

    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();
    }
}

这是我的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);
        }
    }

更新退出项目:

 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

1 个答案:

答案 0 :(得分:0)

对实体框架中的实体所做的更改不会反映在屏幕上,因为您的示例中的两个实例不相关。是的具有相同的值,但它们是内存中两个不同的reference个不同的位置。 **因为ObservableCollection是列表的副本,而不是示例中正在操作的实际列表。

因此他们没有关系。

要显示更改,您可以选择以下选项:

  1. 更改可观察集合所持有的实际对象属性,以镜像对其他 EF实体所做的更改。此外,EF实体必须遵守INotifyPropertyChange,否则屏幕上也不会显示数据属性更改。
  2. 或删除屏幕实体并将更改后的实体添加到列表中。
  3. 或删除整个可观察列表,并使用EF的最新版本重新添加。 (你提到你这样做,这也是一个选择。)