web-dev-qa-db-ja.com

Entity Framework 5で変更されたオブジェクトのリストを取得する方法

次のように、entitiesのリストをデータグリッドビューにバインドしています。

var orders = context.Order.ToList();

BindingList<Order> orderList = new BindingList<Order>(orders);

dataGridView1.DataSource = orderList;

ユーザーはdatagridviewで直接編集または新規追加できます。ユーザーがSaveボタンをクリックすると、パフォーマンスを最適化するために、変更/新規作成されたエンティティのリストを取得して、挿入/更新を実行したいと思います。どうすればこれを達成できますか?

[〜#〜] edit [〜#〜]グリッドビューに新しい行を追加するように定義します:

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);
23
Doan Cuong
_List<Object> 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_ IBindingListからObservableCollectionを作成することが望ましい場合がよくあります。このようにして、双方向のデータバインディングを取得し、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 ;
_

.ToBindingList()を使用するには_System.Data.Entity_を参照する必要があり、EF4.1以降を使用する必要があります。

45
user1914530