如何在实体框架5中获得修改对象的列表
本文关键字:修改 对象 列表 实体 框架 | 更新日期: 2023-09-27 18:21:00
我正在将entities
的列表绑定到这样的数据网格视图:
var orders = context.Order.ToList();
BindingList<Order> orderList = new BindingList<Order>(orders);
dataGridView1.DataSource = orderList;
用户可以直接在datagridview上编辑或添加新内容。当用户单击Save
按钮时,为了优化性能,我想检索已更改/新建的实体列表以执行插入/更新。我怎样才能做到这一点?
编辑定义向网格视图添加新行:
BindinList<Order> orders = (BindingList<Order>)dataGridView1.Datasource;
order.Add(new Order());
编辑2求解:
BindinList<Order> orders = (BindingList<Order>)dataGridView1.Datasource;
Order order = new Order();
context.Order.Add(order);
order.Add(order);
List<Object> modifiedOrAddedEntities = context.ChangeTracker.Entries()
.Where(x => x.State == System.Data.Entity.EntityState.Modified
|| x.State == System.Data.Entity.EntityState.Added)
.Select(x=>x.Entity).ToList();
当将EF实体绑定到DataGridView
时,通常优选从DbSet.Local
ObservableCollection
创建IBindingList
。通过这种方式,您可以获得双向数据绑定,并且在通过BindingSource.Add()
或IBindingList.Add()
进行添加时,您的新实体会自动添加到上下文中。一旦正确绑定,最简单的方法就是将DataGridView.AllowUserToAddRows
设置为true,用户输入的新行将是添加到上下文中的新实体。
context.Orders.Load();
BindingList<Order> bindingList = context.Orders.Local.ToBindingList();
BindingSource ordersBindingSource = new BindingSource();
ordersBindingSource.DataSource = bindingList;
dataGridView1.DataSource = ordersBindingSource ;
必须引用System.Data.Entity
才能使用.ToBindingList()
,并且您必须使用EF4.1或更高版本。