2013-07-04 15 views
20

Ich verbindliche Liste von entities zu einem Datenrasteransicht wie folgt aus:Wie Liste der geänderten Objekte in Entity Framework bekommen 5

var orders = context.Order.ToList(); 

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

dataGridView1.DataSource = orderList; 

Benutzer neu direkt auf Datagridview bearbeiten oder hinzufügen können. Wenn Benutzer auf die Schaltfläche Save klicken, um die Leistung zu optimieren, möchte ich die Liste der Entitäten abrufen, die geändert/neu hinzugefügt wurden, um das Einfügen/Aktualisieren durchzuführen. Wie kann ich das erreichen?

EDIT definieren neue Zeile Grid hinzuzufügen:

BindinList<Order> orders = (BindingList<Order>)dataGridView1.Datasource; 

order.Add(new Order()); 

EDIT 2 Löse:

BindinList<Order> orders = (BindingList<Order>)dataGridView1.Datasource; 

Order order = new Order(); 

context.Order.Add(order); 

order.Add(order); 

Antwort

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

Wenn EF Entitäten Bindung an ein DataGridView es oft vorzuziehen ist, zu schaffen, eine IBindingList aus der DbSet.LocalObservableCollection. Auf diese Weise erhalten Sie eine Zweiwege-Datenbindung, und Ihre neuen Entitäten werden beim Hinzufügen über BindingSource.Add() oder IBindingList.Add() automatisch dem Kontext hinzugefügt. Der einfachste Weg, dies zum Laufen zu bringen, ist, sobald er korrekt gebunden ist, DataGridView.AllowUserToAddRows auf echte und neue Zeilen zu setzen, die die Benutzer eingeben, werden neue Entitäten sein, die dem Kontext hinzugefügt werden.

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

System.Data.Entity referiert werden müssen, .ToBindingList() zu verwenden, und Sie müssen EF4.1 oder größer werden.

+0

Vielen Dank für Ihre schnelle Antwort. Ihr Code kann eine Liste modifizierter Entitäten abrufen, aber er kann keine Liste neuer Entitäten abrufen. Ich stelle Code zur Verfügung, mit dem neue Entitäten hinzugefügt werden können. Kannst du mir helfen, es herauszufinden? –

+0

@DoanCuong, siehe zusätzliche Antwortdetails. –

+0

Entschuldigung, aber würdest du mir bitte zeigen, wie man 'BindingSource.Add()' oder 'IBingdingList.Add()' implementiert? Und noch eine Sache, es gibt keine 'ToBindingList()' -Funktion auf 'dbset.local'. Die einzige Möglichkeit ist die Verwendung von 'var bindingList = new BindingList (context.Orders.Local.ToList());' –

Verwandte Themen