views:

353

answers:

1

I am getting started with Entity Framework 4, and I am getting ready to write a WPF demo app to learn EF4 better. My LINQ queries return IQueryable<T>, and I know I can drop those into an ObservableCollection<T> with the following code:

IQueryable<Foo> fooList = from f in Foo orderby f.Title select f;
var observableFooList = new ObservableCollection<Foo>(fooList);

At that point, I can set the appropriate property on my view model to the observable collection, and I will get WPF data binding between the view and the view model property.

Here is my question: Do I break the ObjectContext when I move my foo list to the observable collection? Or put another way, assuming I am otherwise handling my ObjectContext properly, will EF4 properly update the model (and the database)?

The reason why I ask is this: NHibernate tracks objects at the collection level. If I move an NHibernate IList<T> to an observable collection, it breaks NHibernate's change tracking mechanism. That means I have to do some very complicated object wrapping to get NHibernate to work with WPF. I am looking at EF4 as a way to dispense with all that.

So, to get EF4 working with WPF, is it as simple as dropping my IQueryable<T> results into an ObservableCollection<T>. Does that preserve change-tracking on my EDM entity objects? Thanks for your help.

+2  A: 

You need to sync the ObservableCollection with the ObjectContext. How this can be done shows the BookLibrary sample of the WPF Application Framework (WAF). Look for the EntityObservableCollection.

jbe
That's great! Thanks.
David Veeneman
+1 but it is unfortunate that it requires a magic string for entitySetName - makes refactoring hard.
Stuart