如何获取Entity Framework 5中的已修改对象列表

我将entities列表绑定到数据网格视图,如下所示:

 var orders = context.Order.ToList(); BindingList orderList = new BindingList(orders); dataGridView1.DataSource = orderList; 

用户可以直接在datagridview上编辑或添加新内容。 当用户单击“ Save按钮时,为了优化性能,我想检索已更改/新的实体列表以执行插入/更新。 我怎样才能做到这一点?

编辑定义向gridview添加新行:

 BindinList orders = (BindingList)dataGridView1.Datasource; order.Add(new Order()); 

编辑2解决:

 BindinList orders = (BindingList)dataGridView1.Datasource; Order order = new Order(); context.Order.Add(order); order.Add(order); 

 List modifiedOrAddedEntities = context.ChangeTracker.Entries() .Where(x => x.State == System.Data.EntityState.Modified || x.State == System.Data.EntityState.Added) .Select(x=>x.Entity).ToList(); 

将EF实体绑定到DataGridView ,通常最好从DbSet.Local ObservableCollection创建IBindingList 。 通过这种方式,您可以获得双向数据绑定,并且在通过BindingSource.Add()IBindingList.Add()添加时,您的新实体会自动添加到上下文中。 一旦正确绑定,最简单的方法是将DataGridView.AllowUserToAddRows设置为true,用户输入的新行将添加到上下文中。

 context.Orders.Load(); BindingList bindingList = context.Orders.Local.ToBindingList(); BindingSource ordersBindingSource = new BindingSource(); ordersBindingSource.DataSource = bindingList; dataGridView1.DataSource = ordersBindingSource ; 

必须引用System.Data.Entity才能使用.ToBindingList()并且必须使用EF4.1或更高版本。