Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - WPF und Entity Framework: Gleichzeitiger Zugriff


UGrohne - Do 12.03.09 10:10
Titel: WPF und Entity Framework: Gleichzeitiger Zugriff
Hallo,

ich schreibe gerade mit WPF eine Oberfläche für eine Datenbank mittels Entity Framework. Jetzt habe ich den Fall, dass ich in einem Screen einen TreeView mit Kategorien und einem DataGrid mit den dazugehörigen Artikeln anzeigen muss, funktioniert grundsätzlich eigentlich auch, aber erst beim zweiten Mal.

Beim ersten Zugriff versuchen wohl zwei UIThreads Daten aus der Datenbank zu lesen und zwar einmal für das TreeView und einmal für das DataGrid und das scheint schief zu gehen, weil beim Zugriff vom TreeView aus, ich folgende Exception in der Ausgabe erhalte:

Quelltext
1:
2:
3:
4:
System.Windows.Data Error: 16 : Cannot get 'List' value (type 'ObservableCollection`1') from '' (type 'AllProductCategoriesViewModel'). BindingExpression:Path=List; DataItem='AllProductCategoriesViewModel' (HashCode=3132301); target element is 'TreeView' (Name=''); target property is 'ItemsSource' (type 'IEnumerable') TargetInvocationException:'System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.Data.EntityException: Fehler beim zugrunde liegenden Anbieter auf Open. ---> System.InvalidOperationException: Die Verbindung wurde nicht geschlossen. Der aktuelle Status der Verbindung ist 'Verbindung wird hergestellt'.
   bei System.Data.ProviderBase.DbConnectionBusy.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   bei System.Data.SqlClient.SqlConnection.Open()
   bei System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)

Jetzt weiß ich gerade nur nicht, wie ich da herumkomme. Ich verwende eine gemeinsame Entity-Instanz, damit ich alle Daten nur einmal lade und die Beziehungszuweisungen leicht vornehmen kann und davon will ich auch nicht weg.

Grüße,

Uwe


UGrohne - Sa 14.03.09 21:03

Ich hatte im DataGRid beim Binding IsAsync=true gesetzt, damit kam es wohl zu Konflikten bei den Abfragen, weil EF nicht thread safe ist :(